我一直在用__invoke魔术方法进行一些测试(替换旧代码),我不确定这是否是一个错误:PHP5.3:调用类变量调用时调用“未定义的方法”错误
让我们假设有一个类:
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()
我知道,一个“解决方案”可能是有类测试中的功能(名为k)使用call_user_func_array“转发”该呼叫,但这不够优雅。
我需要将该实例保存在一个公共类(用于设计目的)中,并且能够将其作为其他类的函数调用......任何建议?
更新:
我发现了一些有趣的事情(我的目的至少):
如果我们分配“类变量”到一个局部变量它的工作原理:
$t = new Test;
$m = $t->k;
echo $m(4,5);
请提供一个完整的代码示例,显示您的问题。你说的作品的代码示例不起作用,你说的代码示例给出了一个问题。 – Sjoerd 2010-06-24 07:54:29
是的,对不起,我的坏...我更新它。 Sjoerd:这个例子是否适合你?奇怪的:S – lepe 2010-06-24 07:56:10