在群里看到有个人问,如下代码为什么有语法错误:
false || echo 'xxxx';
常见的用法是false || die('xxxx')
,用了echo就提示错误,估计也是这种写法没见着的原因。那为什么这个代码有问题呢?
首先看短路代码的写法。expression1 || expression2
基本上等同于:
if (expression1) { expression2; }
这种写法很常见,所以没啥问题。
接下来如果把echo改成print系列, var_dump等函数,不会报语法错误。即使换成system, exec等函数,也不会有问题。最开始还以为和函数的返回值类型有关,后来一想php是弱类型语言,php7以下版本的返回值类型在运行时才能确定,应该不是这个问题。
经过以上分析,那最终确定问题出在了echo身上了。于是打开了官方文档,找到了一段文字:
这段话的意思是我们常用的echo不是函数,是个奇行种,调用的时候不需要用括号,但是不能用在函数的上下文中。顺带官方还给出了一个不能使用echo的例子:
// Because echo does not behave like a function, the following code is invalid.
($some_var) ? echo ‘true’ : echo ‘false’;
上述的三目运算符例子中,echo不是函数,所以用在需要计算表达式真假值的上下文就有问题。这也是短路逻辑表达式中不能使用echo的原因。
这个坑可以说是PHP不规范的表现,当然也是基础知识不牢固了^_~
原文链接:https://www.qiquanji.com/post/4821.html
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
微信扫码关注
更新实时通知