You could, of course, dive into the CI code. 🙂
I'm too lazy for that, but came up with this simplistic approach for your consideration:
<?php
class Foo
{
public function hello()
{
echo "<p>Hello, World.";
}
}
abstract class Controller
{
protected $objects = array();
public function addClass($class, $name=null)
{
if($name === null) {
$name = $class;
}
if(property_exists($this, $name)) {
throw new Exception("Property $class already exists");
}
else {
$this->$name = new $class();
}
}
}
class Bar extends Controller
{
public function test()
{
$this->addClass('Foo', 'my_foo');
$this->my_foo->hello();
}
}
$test = new Bar();
$test->test();