【问题标题】:pass a callback WITH arguments in PHP在 PHP 中传递带有参数的回调
【发布时间】:2014-01-16 01:18:37
【问题描述】:

我有一个 PHP 库函数,需要一个不带参数的回调。 我知道我可以使用array($this , 'my_function_name') 传递对象的方法,但是如何将参数传递给my_function_name? 我找到了使用 create_function 的解决方案,但从 PHP 手册中我发现它存在安全问题。

【问题讨论】:

  • 用另一个函数(可能是匿名的)包装它
  • @zerkms - 在这种情况下,匿名函数仍会从“调用”库函数中获取参数。但我想给它我自己的参数。

标签: php callback


【解决方案1】:
$that = $this;

$wrapper = function() use($that) {
    return $that->my_function_name('arg1', 'arg2');
};

【讨论】:

  • 它可以工作,但我认为它需要 php 5.3。我正在制作一个 wordpress 主题,所以“使用”它还没有为我准备好。
  • @Emanuel Mocean:那么除了为此创建一个真正的方法之外,您没有其他好的选择。 public function wrapper() ...
  • 在我的特殊情况下,我仍然必须找到一种将参数传递给公共函数包装器的方法,因为我唯一知道要作为参数提供给回调的时间是当我传递打回来。换句话说,我需要“使用”部分来使我的局部变量在回调中可用。
  • 更清楚一点:我要做的是将“渲染”回调传递给 add_submenu_page Wordpress 函数,并给该回调一个参数,以便它知道要绘制哪个页面。
  • 没关系,我找到了一种从 $_GET[] 读取 ?page 变量的方法。
【解决方案2】:

这将取决于您的库函数启动的回调方法。您提到您正在制作一个 wordpress 主题。 WP 通常使用call_user_func 方法。在您的库函数中,使用此函数调用带有 args 的回调,在调用它时包装一个方法参数:

回调定义:

$callbackArg = "Got here";
defined_lib_func(array($this , 'my_function_name'), $callbackArg);

库脚本:

function defined_lib_function($callback, $args) {
  call_user_func($callback, $args);
}

对于多个参数,只需将它们作为数组传递并定义回调方法以接受数组作为参数。

【讨论】:

    【解决方案3】:

    有一个函数叫call_user_func_array

    call_user_func_array([$this, 'method'], $args);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 2018-11-19
      • 2012-12-21
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多