加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:24:47 所属栏目:PHP教程 来源:网络整理
导读:参见英文答案 Parentheses altering semantics of function call result2个 我一直在寻找这个,但只发现了“这是一个有效的技巧”的行,但从来没有解释过. 在以下代码中: error_reporting(-1);ini_set("display_errors",1);end(array_flip($_GET));end((array
参见英文答案 > 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发布,这个技巧将不再适用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读