在PHP中传递带参数的回调函数

6

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


用另一个函数(可能是匿名的)将其包装起来。 - zerkms
@zerkms - 在这种情况下,匿名函数仍将从“调用”库函数获取参数。但我想自己传递参数。 - Emanuel Mocean
提供以下已接受答案的重复页面:使用在其外部计算的变量的回调函数 - mickmackusa
3个回答

13
$that = $this;

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

它可以工作,但我认为它需要 PHP 5.3。我正在制作一个 WordPress 主题,因此 "use" 对我来说还没有准备好。 - Emanuel Mocean
@Emanuel Mocean:那么你没有其他好的选择,只能创建一个真正的方法来实现。public function wrapper() ... - zerkms
在我的特定情况下,我仍然需要找到一种方法来将参数传递给公共函数包装器,因为我只有在传递回调函数时才知道要提供什么参数。换句话说,我需要使用“use”部分使我的本地变量在回调中可用。 - Emanuel Mocean
更明确地说,我正在尝试将“渲染”回调传递给add_submenu_page Wordpress函数,并为该回调提供一个参数,以便它知道要绘制哪个页面。 - Emanuel Mocean
没事了,我找到一种方法从 $_GET[] 中读取 page 变量。 - Emanuel Mocean

3

0
这将取决于您的库函数启动回调方法。您提到正在制作WordPress主题。WP通常使用call_user_func方法。在您的库函数中,使用此函数调用带有参数的回调,调用方法时包装方法参数:
回调定义:
$callbackArg = "Got here";
defined_lib_func(array($this , 'my_function_name'), $callbackArg);

库脚本:

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

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


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