在使用 Laravel 框架时,更具体地说 - 表单宏,我偶然发现了一个奇怪的错误。
起初,我认为 Laravel 有问题,但后来我断章取意:
<?php
// placeholder function that takes variable as reference
$function = function(&$reference)
{
// append to variable
$reference = $reference . ':' . __METHOD__;
};
// test with straight call
$variable = 'something';
$function($variable);
echo $variable;
// test with call_user_func(), that gets called in Laravels case
$variable = 'something'; // reset
call_user_func($function, $variable);
echo $variable;
当第一次调用$function
正确执行时,第二次尝试使用call_user_func()
, 产生(摘自 Codepad):
Warning: Parameter 1 to {closure}() expected to be a reference, value given
PHP Warning: Parameter 1 to {closure}() expected to be a reference, value given
小提琴:键盘@ Viper-7
在写这篇文章时,我想到了call_user_func_array()
:fiddle here,但产生了同样的错误。
我对引用有什么问题还是这是 PHP 的错误?