我一直在寻找这个,但只发现了"这是一个有效的技巧"的行,但从来没有解释过.
在以下代码中:
error_reporting(-1);
ini_set("display_errors", 1);
end(array_flip($_GET));
end((array_flip($_GET)));
Run Code Online (Sandbox Code Playgroud)
第一次打电话end()通知结果:
严格的标准:只有变量应该在第3行的/home/john/www/test/dp.php中通过引用传递
下一个array_flip($_GET)附带的内容()不会引起任何投诉.
我理解通知的原因,严格标准是什么,"通过引用传递"意味着什么,并end()接受对数组的引用作为其参数.(必须的,因为它会影响原来的.)我担心的是,为什么它的工作原理.周围是否()创建了一个临时变量,或者这只是以某种方式欺骗PHP解析器?如果它确实创建了一个临时变量(并且通过设计这样做),那么这应该是安全的,但是如果它是一个欺骗解析器的黑客,那么它可能会在未来的PHP版本中破坏.(我碰巧在PHP版本5.4.36-0 + deb7u1上)
请注意,我不确定我是否喜欢这种结构,即使它是安全的(很容易看不到它,而其他人可能不知道为什么会这样),但是当功能可以很方便时,它通常很方便易读.像这样串起来.
小智 3
这涉及到实现细节,如StackOverflow 上其他地方所讨论的。
总结:这种行为实际上应该被视为一个错误。不要依赖它。事实上,多亏了这个 RFC,一旦 PHP 7 发布,这个技巧将不再起作用。