脚本宝典收集整理的这篇文章主要介绍了PHP5.3:从类变量调用invoke时“调用未定义的方法”错误,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
让我们假设我们有一个班级:
class Calc { function __invoke($a,$b){ return $a*$b; } }
以下是可能的,并且没有任何问题:
$c = new Calc; $k = $c; echo $k(4,5); //outputs 20
但是,如果我想要另一个类来存储该对象的实例,
这不起作用:
class test { public $k; function __construct() { $c = new Calc; $this->k = $c; //Just to show a similar sITuation than before // $this-k = new Calc; PRoduces the same error. } }
$t = new Test; echo $t->k(4,5); //Error: Call to undefined method Test::k()
我知道“解决方案”可能是在类Test(名为k)中使用call_user_func_array来“转发”调用,但这并不优雅.
我需要将该实例保留在公共类中(出于设计目的)并能够将其作为函数从其他类中调用…任何建议?
更新:
我找到了一些有趣的东西(至少对我而言):
如果我们将“类变量”分配给局部变量,它可以工作:
$t = new Test; $m = $t->k; echo $m(4,5);
您可以将magic __call方法添加到Test类中,以检查是否存在具有被调用方法名称的属性,并调用该方法:
public function __call($method,$args) { if(proPErty_exists($this,$method)) { $prop = $this->$method; return $prop(); } }
我将调用的参数添加到您.
您可能还想检查属性is_callable
.
但无论如何,那么你可以做到
$test->k();
以上是脚本宝典为你收集整理的PHP5.3:从类变量调用invoke时“调用未定义的方法”错误全部内容,希望文章能够帮你解决PHP5.3:从类变量调用invoke时“调用未定义的方法”错误所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。