在项目开发中发现程序报错Strict Standards: Only variables should be passed by reference in,然后搜索解决。开发完项目就写个简单的代码然后记录下来,以防遗忘。
报错代码简例:
$testArr = [
0 => 'a',
1 => 'b',
2 => 'c',
3 => 'd'
];
reset(array_flip($testArr));
报错的原因也很简单,查看PHP手册reset函数:
mixed reset ( array &$array )
PHP版本自5.3开始,对引用传递参数的一些规则进行了变更,手册内容摘抄:
按引用传递参数的函数在被按值传递调用时行为发生改变. 此前函数将接受按值传递的参数, 现在将抛出致命错误. 之前任何期待传递引用但是在调用时传递了常量或者字面值 的函数, 需要在调用前改为将该值赋给一个变量。
这部分摘抄的来源是 PHP 手册 附录 从 PHP 5.2.x 移植到 PHP 5.3.x 部分,有兴趣的同学可以去看看。
摘抄部分的意思可以这么说:PHP 5.3以后(包括)这个内置函数的值是引用操作的,引用传递的参数要求必须是具体的变量,而不能通过函数返回值传递。
新的代码:
$testArr = array(
0 => 'a',
1 => 'b',
2 => 'c',
3 => 'd'
);
$newTestArr = array_flip($testArr);
reset($newTestArr);