加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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);

或者尝试classkit_method_addrunkit以获得“正确”的解决方案. – 如果你的PHP可用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读