$el = array_shift($instance->find(..))
上面的代码以某种方式报告了严格标准警告,但这不会:
function get_arr(){
return array(1, 2);
}
$el = array_shift(get_arr());
那么,它什么时候会报告警告呢?
发布于 2010-03-01 17:00:28
$instance->find()
返回对变量的引用。
当您尝试将此引用用作函数的参数时,您会得到报告,而不是先将其存储在变量中。
这有助于防止内存泄漏,并可能在下一个PHP版本中成为一个错误。
如果第二个代码块写成这样(注意函数签名中的&
),那么它将抛出一个错误:
function &get_arr(){
return array(1, 2);
}
$el = array_shift(get_arr());
因此,一个快速(但不是很好)的解决方案是:
$el = array_shift($tmp = $instance->find(..));
基本上,您首先对临时变量进行赋值,然后将该变量作为参数发送。
发布于 2014-11-25 20:16:44
错误的原因是使用了内部PHP编程数据结构函数array_shift() php.net/end。
该函数以数组作为参数。尽管手册中的array_shift()
原型中指出了一个与号,但该函数的扩展定义中没有任何警示文档,也没有任何明显的解释说明该参数实际上是通过引用传递的。
也许这就是/理解/。然而,我不理解,所以我很难检测出错误的原因。
重现代码:
function get_arr()
{
return array(1, 2);
}
$array = get_arr();
$el = array_shift($array);
发布于 2010-03-01 17:24:10
第二个代码片段也不起作用,这就是原因。
array_shift
是一个修饰符函数,它改变了它的参数。因此,它希望它的参数是一个引用,而你不能引用不是变量的东西。请参阅Rasmus的解释:Strict standards: Only variables should be passed by reference
https://stackoverflow.com/questions/2354609
复制相似问题