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

前端之家收集整理的这篇文章主要介绍了PHP:为什么带括号的周围函数调用会阻止“通过引用传递”通知?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Parentheses altering semantics of function call result2个
我一直在寻找这个,但只发现了“这是一个有效的技巧”的行,但从来没有解释过.

在以下代码中:

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

第一次调用end()会产生一个通知

Strict Standards: Only variables should be passed by reference in /home/john/www/test/dp.PHP on line 3

下一个,在()中包含array_flip($_ GET)不会产生任何投诉.

我理解通知的原因,严格标准是什么,’通过引用传递’意味着什么,并且end()接受对数组的引用作为其参数. (它必须,因为它会影响原作.)我关心的是它的工作原理. around()是否创建了一个临时变量,或者这只是以某种方式欺骗PHP解析器?如果它确实创建了一个临时变量(并且通过设计这样做),那么这应该是安全的,但如果它是一个欺骗解析器的黑客,那么它可能会在PHP的未来版本中破坏. (我碰巧在PHP版本5.4.36-0 deb7u1上)

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

解决了实现细节,如 elsewhere on StackOverflow所述.

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

原文链接:https://www.f2er.com/php/137285.html

猜你在找的PHP相关文章