【问题标题】:PHP: Callback functionsPHP:回调函数
【发布时间】:2010-10-25 15:42:48
【问题描述】:

PHP 中的某些函数需要回调函数。我自己如何在函数中执行此操作?首先,如何定义一个需要回调函数的函数?

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

【问题讨论】:

标签: php function callback


【解决方案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(passed_argument) 更安全,因为检查函数是否实际存在是为您完成的,尽管有些人评论了$c($a) 的性能下降。

【讨论】:

  • 最好先使用 is_callable() ,以确保 $c 是可调用函数。
  • 为了完整起见,我可能会使用与您的代码类似的东西,但我不确定它是否会有所作为。传递一个不可调用的函数将导致以下两种情况之一:您的代码将抛出错误,因为您使用了 is_callable,或者 PHP 将抛出错误,因为 $c() 不是有效的回调。最终结果是一样的,但是后者更快,因为它避免了调用 is_callable 和 call_user_func。
【解决方案2】:
function myFunc($param1, $param2, $callback) {
   $data = get_data($param1, $param2)
   $callback($data);
}

【讨论】:

    【解决方案3】:

    您可以使用类型提示来强制某人使用特定类型的变量。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多