我有一个现有的类,我想创建一个系统来为它加载“插件”。这些“插件”被创建为文件,然后包含在主类的文件中。
现在我认为主类需要用他们自己的类来扩展那些小“插件”。问题是我不知道哪些插件会包含不同的用户。所以类的扩展是动态的。
如何在不使用 eval 的情况下即时扩展一个类(我也没有测试过)?
我有一个现有的类,我想创建一个系统来为它加载“插件”。这些“插件”被创建为文件,然后包含在主类的文件中。
现在我认为主类需要用他们自己的类来扩展那些小“插件”。问题是我不知道哪些插件会包含不同的用户。所以类的扩展是动态的。
如何在不使用 eval 的情况下即时扩展一个类(我也没有测试过)?
你可以通过使用 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 的方法和属性。这种技术可以扩展到从任意数量的类中聚合功能。
你在谈论__autoload吗?
function __autoload($class) {
require_once($class.'.php');
}
$object = new Something();
这将尝试require_once(Something.php);