php – 将代码(方法)注入到类中?
发布时间:2020-12-13 21:41:14 所属栏目:PHP教程 来源:网络整理
导读:拿这个简单的代码: class MyClass { public $customFunction = array(); public function run($name){ call_user_func($this-customFunction[$name]); }}// Usage:$c = new MyClass();$c-customFunction['first'] = function (){ /* some code*/ };$c-run('
拿这个简单的代码:
class MyClass { public $customFunction = array(); public function run($name){ call_user_func($this->customFunction[$name]); } } //> Usage: $c = new MyClass(); $c->customFunction['first'] = function (){ /* some code*/ }; $c->run('first'); 这个cose作为被激发的.我将该函数添加到$customFunction然后我可以调用它形式run();方法. 问题出现在我注入的函数中,我尝试做一些与对象相关的事情,例如,如果我添加这个函数: $c->customFunction['first'] = function(){ $this->callsomemethod(); } 当我调用run();方法PHP说我不能在静态上下文中使用$this. 我有办法注入这些功能并能够使用对象方法吗? (注意:当然我的课只是一个例子,我需要这个范围) 感谢Mario,我将使用以下解决方案: public function run($name) { call_user_func($this->customFunction[$name],$this); } 在这一点上,我只需要像这样添加parm函数: = function ($this) { /*some code*/}; 而$this将模拟对象上下文范围. 解决方法
错误源自您在示例中显示为/ *某些代码* /的代码.
您在此处指定匿名函数: $c->customFunction['first'] = function (){ /* some code*/ }; 它仍然只是一个功能.它不会成为班级的真正方法.所以在其中使用$this是行不通的. 解决方法:将自定义函数传递给$obj参数,并让它们使用它而不是$this. (真的,只是一个古怪的解决方法;但可行.) call_user_func($this->customFunction[$name],$obj=$this); 或者尝试 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |