我有几个库使用类似于以下代码的代码。
$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 代码中定义的函数没有这样做。
以这种方式使用call_user_func_array()
在 PHP 5.4 中有效吗?