打印行为php

Dar*_*ric 2 php

下面是奇怪的,我没有得到

if (print("foo") || print("bar")) {
  // "foo" has been printed.
}
Run Code Online (Sandbox Code Playgroud)

为什么输出1

可以解释一下吗?

Joh*_*ica 5

这是因为PHP是一种荒谬的语言.print它不是一个正常的函数,它是一种语言结构.该行实际上被解析为:

if (print (("foo") || print("bar")))
Run Code Online (Sandbox Code Playgroud)

并且("foo") || print("bar")是一个评估为的表达式1."foo"布尔上下文中的字符串为true,因此||运算符会产生1.

如果您明确地将表达式括起来的方式是人们期望它被解析的方式:

if ((print("foo")) || (print("bar"))) 
Run Code Online (Sandbox Code Playgroud)

然后输出就是你所期望的:

foo
Run Code Online (Sandbox Code Playgroud)