使用php加载“动态”类

时间:2012-08-13 22:36:41

标签: php oop class dynamicobject

我有一个现有的类,我想创建一个系统来为它加载“插件”。这些“插件”被创建为文件,然后包含在主类的文件中。

现在我认为主类需要用自己的类扩展那些小“插件”。问题是我不知道哪些插件会包含不同的用户。所以类的扩展是动态的。

如何在课堂上进行扩展,可能不使用eval(我也没有测试过)?

2 个答案:

答案 0 :(得分:0)

你可以使用PHP的魔术功能来做到这一点。假设你有A类。你想要一个A的“实例”,并提供一些额外的方法。

class A {
    public $publicA;

    public function doA() {
        $this->publicA = "Apple";
    }
}

class B {
    public $publicB;

    public function doB() {
        $this->publicB = "Bingo";
    }

    private $object;

    public function __construct($object) {
        $this->object = $object;
    }

    public function __call($name, $arguments) {
        return call_user_func_array(array($this->object, $name), $arguments);
    }

    public function __get($name) {
        return $this->object->$name;
    }

    public function __set($name, $value) {
        $this->object->$name = $value;
    }
}

$b = new B(new A);

$b->doA();
$b->doB();
echo "$b->publicA, $b->publicB";

实例$ b具有A和B的方法和属性。这种技术可以扩展到从任意数量的类聚合功能。

答案 1 :(得分:0)

你在谈论__autoload吗?

function __autoload($class) {
    require_once($class.'.php');
}
$object = new Something();

这将尝试require_once(Something.php);