php中的echo

作者 | 2017年2月11日

在群里看到有个人问,如下代码为什么有语法错误:

  false || echo 'xxxx';

常见的用法是false || die('xxxx'),用了echo就提示错误,估计也是这种写法没见着的原因。那为什么这个代码有问题呢?

首先看短路代码的写法。expression1 || expression2基本上等同于:

  if (expression1) {
    expression2;
  }

这种写法很常见,所以没啥问题。

接下来如果把echo改成print系列, var_dump等函数,不会报语法错误。即使换成system, exec等函数,也不会有问题。最开始还以为和函数的返回值类型有关,后来一想php是弱类型语言,php7以下版本的返回值类型在运行时才能确定,应该不是这个问题。

经过以上分析,那最终确定问题出在了echo身上了。于是打开了官方文档,找到了一段文字:

echo is not actually a function (it is a language construct), so you are not required to use parentheses with it. echo (unlike some other language constructs) does not behave like a function, so it cannot always be used in the context of a function….

这段话的意思是我们常用的echo不是函数,是个奇行种,调用的时候不需要用括号,但是不能用在函数的上下文中。顺带官方还给出了一个不能使用echo的例子:

// Because echo does not behave like a function, the following code is invalid.
($some_var) ? echo ‘true’ : echo ‘false’;

上述的三目运算符例子中,echo不是函数,所以用在需要计算表达式真假值的上下文就有问题。这也是短路逻辑表达式中不能使用echo的原因。

这个坑可以说是PHP不规范的表现,当然也是基础知识不牢固了^_~

发表评论

电子邮件地址不会被公开。 必填项已用*标注