PHP中的某些函數需要回調函數。我如何在一個函數中自己做到這一點?首先,我如何定義一個需要回調函數的函數?PHP:回調函數
其次,如何提供自定義函數作爲回調函數?我如何提供常規函數,實例函數和靜態函數?
PHP中的某些函數需要回調函數。我如何在一個函數中自己做到這一點?首先,我如何定義一個需要回調函數的函數?PHP:回調函數
其次,如何提供自定義函數作爲回調函數?我如何提供常規函數,實例函數和靜態函數?
使用內置的call_user_func()。這可能需要使用call_user_func_array()
function work($a, $c) {
$a = filter($a)
if(!is_callable($c) || !call_user_func($c, $a)) {
return 0; // throw error
} else {
return 1; // return success
}
}
這不僅僅是做$c($a)
a.k.a passed_callback(passed_argument)更安全,因爲檢查,以查看是否功能確實存在你做卻也有過$c($a)
評論性能下降。
可能首先使用is_callable(),以確保$ c是可調用的函數。 – mellowsoon 2010-10-25 16:21:46
@mellowsoon:好點。答案已更新。 – 2010-10-25 16:42:25
我可能會使用類似於您的代碼的東西來完成,但我不確定它是否有所作爲。傳遞一個不可調用的函數會導致以下兩種情況之一:你的代碼會因爲使用is_callable而引發錯誤,或者PHP會拋出錯誤,因爲$ c()不是有效的回調函數。最終結果是相同的,但後者更快,因爲它避免了調用is_callable和call_user_func。 – mellowsoon 2010-10-25 16:59:58
function myFunc($param1, $param2, $callback) {
$data = get_data($param1, $param2)
$callback($data);
}
您可以使用類型提示來強制某人使用特定類型的變量。
function test(callable $test){
echo __LINE__.PHP_EOL;
$test();
echo __LINE__.PHP_EOL;
}
test(function(){
echo __LINE__.PHP_EOL;
});
閱讀手冊 - http://php.net/manual/en/language.pseudo-types.php 。這是對「PHP回調函數」的 – thetaiko 2010-10-25 15:45:12
可能重複的谷歌搜索的第一個結果[如何在PHP中實現回調?](http://stackoverflow.com/questions/48947/how-do-i-implement-a-callback-in-php) – Gordon 2010-10-25 15:52:18
請記住,PHP 5.3引入了閉包,因此5.3之前和5.3+之間的回調使用可能不同。 – erjiang 2010-10-25 16:58:11