PHP:为什么带括号的周围函数调用会阻止'通过引用传递'通知?

时间:2015-01-27 19:48:11

标签: php

我已经四处搜索过这个问题,但只发现了"这里的一些诀窍"但从来没有解释过。

在以下代码中:

error_reporting(-1);
ini_set("display_errors", 1);
end(array_flip($_GET));
end((array_flip($_GET)));

第一次拨打end()会收到通知:

  

严格标准:只应在第3行的/home/john/www/test/dp.php中通过引用传递变量

下一个array_flip($_GET)括在()中,并不会产生任何投诉。

我理解通知的原因,严格标准是什么,以及通过引用传递的内容'表示,end()接受对数组的引用作为其参数。 (它必须,因为它会影响原作。)我关心的是为什么它有效。周围的()是否创建了一个临时变量,或者这只是以某种方式欺骗PHP解析器?如果它 创建一个临时变量(并且通过设计这样做),那么这应该是安全来使用,但如果它是 hack 欺骗解析器然后它可能会破坏PHP的未来版本。 (我碰巧在PHP版本5.4.36-0 + deb7u1上)

请注意,我不确定我喜欢这种结构,即使它是安全的(很容易看不到它,而其他人可能不知道它为什么会在那里),但是当函数可以像这样串联起来时,它通常很方便易读。

1 个答案:

答案 0 :(得分:3)

这可以解决实现细节问题,如elsewhere on StackOverflow所述。

总结:这种行为实际上应该被认为是一个错误。不要依赖它。事实上,多亏了this RFC,一旦PHP 7发布,这个技巧就不再适用了。