首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误消息“严格标准:只应通过引用传递变量”

错误消息“严格标准:只应通过引用传递变量”
EN

Stack Overflow用户
提问于 2010-03-01 16:35:55
回答 4查看 161.3K关注 0票数 81
代码语言:javascript
复制
$el = array_shift($instance->find(..))

上面的代码以某种方式报告了严格标准警告,但这不会:

代码语言:javascript
复制
function get_arr(){
    return array(1, 2);
}
$el = array_shift(get_arr());

那么,它什么时候会报告警告呢?

EN

回答 4

Stack Overflow用户

发布于 2010-03-01 17:00:28

$instance->find()返回对变量的引用。

当您尝试将此引用用作函数的参数时,您会得到报告,而不是先将其存储在变量中。

这有助于防止内存泄漏,并可能在下一个PHP版本中成为一个错误。

如果第二个代码块写成这样(注意函数签名中的& ),那么它将抛出一个错误:

代码语言:javascript
复制
function &get_arr(){
    return array(1, 2);
}
$el = array_shift(get_arr());

因此,一个快速(但不是很好)的解决方案是:

代码语言:javascript
复制
$el = array_shift($tmp = $instance->find(..));

基本上,您首先对临时变量进行赋值,然后将该变量作为参数发送。

票数 7
EN

Stack Overflow用户

发布于 2014-11-25 20:16:44

错误的原因是使用了内部PHP编程数据结构函数array_shift() php.net/end。

该函数以数组作为参数。尽管手册中的array_shift()原型中指出了一个与号,但该函数的扩展定义中没有任何警示文档,也没有任何明显的解释说明该参数实际上是通过引用传递的。

也许这就是/理解/。然而,我不理解,所以我很难检测出错误的原因。

重现代码:

代码语言:javascript
复制
function get_arr()
{
    return array(1, 2);
}
$array = get_arr();
$el = array_shift($array);
票数 6
EN

Stack Overflow用户

发布于 2010-03-01 17:24:10

第二个代码片段也不起作用,这就是原因。

array_shift是一个修饰符函数,它改变了它的参数。因此,它希望它的参数是一个引用,而你不能引用不是变量的东西。请参阅Rasmus的解释:Strict standards: Only variables should be passed by reference

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2354609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档