参见英文答案 >
Parentheses altering semantics of function call result2个
我一直在寻找这个,但只发现了“这是一个有效的技巧”的行,但从来没有解释过.
我一直在寻找这个,但只发现了“这是一个有效的技巧”的行,但从来没有解释过.
在以下代码中:
error_reporting(-1); ini_set("display_errors",1); end(array_flip($_GET)); end((array_flip($_GET)));
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所述.
原文链接:https://www.f2er.com/php/137285.html总结:这种行为实际上应该被视为一种错误.不要依赖它.事实上,多亏了this RFC,一旦PHP 7发布,这个技巧将不再适用.