我一直在用__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