PHP:回调函数

3

PHP中的一些函数需要回调函数。我如何在自己的函数中实现这个功能?首先,我如何定义一个需要回调函数的函数?

其次,我如何提供自定义函数作为回调函数?我如何提供常规函数、实例函数和静态函数?


阅读手册-http://php.net/manual/zh/language.pseudo-types.php。这是在谷歌搜索“php回调函数”时的第一个结果。 - thetaiko
可能是如何在PHP中实现回调?的重复问题。 - Gordon
请注意,PHP 5.3引入了闭包函数,因此在5.3之前和5.3及以上版本中,回调函数的使用可能会有所不同。 - erjiang
3个回答

1
function myFunc($param1, $param2, $callback) {
   $data = get_data($param1, $param2)
   $callback($data);
}

1

使用内置的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),也就是传递的回调(passed_callback)(传递的参数)更安全,因为检查函数是否实际存在是由系统自动完成的,尽管有些人评论说会导致性能下降。


1
最好先使用is_callable()函数来确保$c是一个可调用的函数。 - mellowsoon
我可能会使用类似于你的代码的东西,只是为了完整起见,但我不确定它是否有所区别。传递一个非可调用函数将导致以下两种情况之一:您的代码将抛出错误,因为您使用了is_callable,或者PHP将抛出错误,因为$c()不是有效的回调。最终结果是相同的,但后者更快,因为它避免了调用is_callable和call_user_func。 - mellowsoon

1
你可以使用类型提示来强制某人使用特定类型的变量。
function test(callable $test){
    echo __LINE__.PHP_EOL;
    $test();
    echo __LINE__.PHP_EOL;
}

test(function(){
    echo __LINE__.PHP_EOL;
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接