gpt4 book ai didi

php - 是否可以动态地向/扩展类添加代码?

转载 作者:可可西里 更新时间:2023-11-01 00:11:17 24 4
gpt4 key购买 nike

我想为我的代码编写一种“插件/模块”系统,如果我可以在类定义后将其“添加”到类中,事情会变得容易得多。

例如,像这样:

class foo {
public function a() {
return 'b';
}
}

上课了。现在我想在它定义之后向它添加另一个函数/变量/常量。

我意识到这可能是不可能的,但我需要确认。

最佳答案

不,您不能在运行时向已定义的类添加方法。

但是您可以使用 __call/__callStatic 魔术方法创建类似的功能。

Class Extendable  {
private $handlers = array();
public function registerHandler($handler) {
$this->handlers[] = $handler;
}

public function __call($method, $arguments) {
foreach ($this->handlers as $handler) {
if (method_exists($handler, $method)) {
return call_user_func_array(
array($handler, $method),
$arguments
);
}
}
}
}

Class myclass extends Extendable {
public function foo() {
echo 'foo';
}
}

CLass myclass2 {
public function bar() {
echo 'bar';
}
}

$myclass = new myclass();
$myclass->registerHandler(new myclass2());

$myclass->foo(); // prints 'foo'
echo "\n";

$myclass->bar(); // prints 'bar'
echo "\n";

这个解决方案非常有限,但也许对你有用

关于php - 是否可以动态地向/扩展类添加代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com