我有一個應該自己調用的匿名函數。
我更喜歡在調用遞歸函數時使用call_user_func_array(__FUNCTION__, $params);
。
由於您的示例沒有任何參數,我認爲call_user_func(__FUNCTION__);
會更適合。
你會希望並希望下面的代碼可以工作,但這太容易了。
$bar = 10;
$foo = 0;
$f = function() use (&$bar,$foo) {
if($bar){ // condition needed to prevent infinite loop
echo $bar-- . PHP_EOL;
call_user_func(__FUNCTION__); // wont work
}
};
$f();
的__FUNCTION__
"Magic constant"不可用於封閉所以需要代碼被適配爲允許函數的變量的傳遞。我們可以通過傳遞它作爲常規參數或通過use
聲明使該函數可用。通過use
聲明
$bar = 10;
$foo = 0;
$__FUNCTION__ = function() use (&$bar, $foo, &$__FUNCTION__) {
if($bar){
echo $bar-- . PHP_EOL;
call_user_func($__FUNCTION__);
}
};
$__FUNCTION__();
Working example
函數傳遞的參數傳遞
$bar = 10;
$foo = 0;
$f = function($__FUNCTION__ = null) use (&$bar, $foo) {
if($__FUNCTION__ && $bar){
echo $bar-- . PHP_EOL;
call_user_func($__FUNCTION__, $__FUNCTION__);
}
};
$f ($f);
功能,點擊編輯 - >ideone吧!重新運行代碼。
發佈您的代碼將有所幫助。 –
停止downvoting答案,你原來的問題沒有提到任何地方的匿名函數。你應該給他們時間編輯或刪除。 – Esailija
查看http://stackoverflow.com/questions/2480179/anonymous-recursive-php-functions –