【发布时间】:2015-03-26 13:19:37
【问题描述】:
我对此进行了四处搜索,但只找到了类似于“这是一个有效的技巧”但从未解释过的东西。
在以下代码中:
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)
请注意,即使它是安全的,我也不确定我是否喜欢这种结构(很容易看不到它,其他人可能不知道它为什么在那里),但它通常方便且易于阅读函数可以这样串起来。
【问题讨论】:
-
邓布利多在 S.O 好吧,我会的
-
@mario - 谢谢,我相信你是对的。我没见过那个。毕竟听起来它并不完全安全。
-
无法保证这将继续与 PHP7 一起工作。尽管可以放宽 E_STRICT 通知,但并非不可行,就像
empty()on 表达式一样。
标签: php