【发布时间】:2012-07-01 12:36:08
【问题描述】:
我有几个库使用类似于以下代码的代码。
$args = array_merge(array(&$target, $context), $args);
$result = call_user_func_array($callback, $args);
这两种情况下的代码都不同,但我展示的代码基本上是完成的。 $callback 函数使用以下签名:
function callback(&$target, $context);
库文件和第三方代码(称为插件或扩展)都采用该函数签名,这意味着没有一个扩展将回调定义为,例如,function my_extension_loader_callback($target, $context)。
让我感到困惑的是call_user_func_array() 文档中的以下句子。
在 PHP 5.4 之前,param_arr 中的引用变量通过引用传递给函数,而不管函数是否期望相应的参数通过引用传递。这种形式的调用时按引用传递不会发出弃用通知,但它仍然被弃用,并已在 PHP 5.4 中删除。 此外,这不适用于遵循函数签名的内部函数。 当函数需要通过引用传递参数时,按值传递会导致警告并让
call_user_func()返回FALSE。
特别是,突出显示的句子似乎表明 PHP 代码中定义的函数没有这样做。
在 PHP 5.4 中以这种方式使用 call_user_func_array() 是否有效?
【问题讨论】:
标签: php pass-by-reference php-5.4