我試圖運行Greeter類的$ greeter實例的$ greeter函數屬性。我讀過answers from this related post,但無法讓它們工作(該文章還提到_call,traits,stdClass,從一個函數返回一個函數(這對我來說沒有意義,爲什麼它不需要調用兩次),以及給定的解決方案似乎對我試圖實現的簡單事情來說是過度的)。也許我的情況有點不同。我不明白爲什麼解析器混亂了。將匿名函數賦予屬性的類別:從實例調用賦值函數失敗
class Greeter {
private $greeter;
function __construct() {
$this->greeter = function() {
echo "Hello!\n";
};
}
public function greet() {
$this->greeter();
}
}
// THIS WORKS AS EXPECTED:
$hello = function() { echo "Hi!\n"; };
$hello();
$greeter = new Greeter();
// NEITHER OF THESE WORK:
call_user_func($greeter->greet);
$greeter->greet();
$greeter['greet']();
OUTPUT:
Hi!
<br />
<b>Warning</b>: call_user_func() expects parameter 1 to be a valid callback, no array or string given on line <b>30</b><br />
<br />
<b>Fatal error</b>: Call to undefined method Greeter::greeter() on line <b>15</b><br />
是的,我的意思是在C++ 11中修復的'''vs.'>>'。至於你發佈的代碼,它確實表明PHP是一種有趣的語言。 – 2015-02-08 23:23:45