假設這個類代碼:是否可以存儲對象方法的引用?
class Foo {
function method() {
echo 'works';
}
}
有什麼辦法來存儲到Foo
實例的method
方法的引用?
我只是試驗和擺弄,我的目標是檢查PHP是否允許在每次都沒有寫入$FooInstance->
的情況下調用$FooInstance->method()
。我知道我可以爲此寫一個函數包裝器,但我更感興趣的是獲取對實例方法的引用。
例如,這種僞代碼理論上存儲$foo->method
在$method
變量:
$foo = new Foo();
$method = $foo->method; //Undefined property: Foo::$method
$method();
顯然,作爲method
是一個方法,我不()
調用它的解釋認爲我在找對於一個財產,因此這是行不通的。
我已閱讀Returning References,但示例僅顯示如何返回對變量的引用,而不是方法。
因此,我已經適應我的代碼存儲在一個變量匿名函數並返回它:
class Foo {
function &method() {
$fn = function() {
echo 'works';
};
return $fn;
}
}
$foo = new Foo();
$method = &$foo->method();
$method();
這工作,但比較難看。此外,沒有簡單的方法來調用它一次,因爲這似乎需要將返回的函數存儲在變量之前調用它:$foo->method()();
和($foo->method())();
是語法錯誤。
而且,我已經試過的情況下直接將其存儲在一個變量返回的匿名函數,但我得到通知如下:
注意:只有變量引用應參考
返回
這是否意味着返回/存儲對類實例方法的引用是不可能的/不鼓勵或者我忽略了某些東西?
更新:我不介意,如果有必要增加一個getter,我們的目標是剛開的方法的引用。我甚至已經試過:
class Foo {
var $fn = function() {
echo 'works';
};
function &method() {
return $this->fn;
}
}
但從unexpected 'function' (T_FUNCTION)
錯誤我相信PHP明智不允許屬性來存儲功能。
我開始相信,如果不使用醜陋的黑客,我的目標不易實現,如eval()
。
我見過'()'一個字符串變量,但它是我第一次看到一個數組被調用。感謝Man頁面鏈接。 '=]' – 2013-05-05 02:31:58
@FabrícioMatté我已更新添加到文檔頁面的鏈接。它與回調。這是一段時間的慣例,但我認爲它看起來非常醜陋。 – 2013-05-05 02:35:46
如果你稱之爲醜陋,我希望你永遠不必閱讀我的JavaScript代碼片段。 ';''再次感謝您的快速回答。 – 2013-05-05 02:37:48