使用括号时,打印构造的行为是否有所不同?

时间:2013-06-29 15:11:05

标签: php boolean operators expression

我不确定括号是否有所不同或我做错了什么! 这是我偶然遇到的情况..

 print (FALSE or TRUE);     //prints '1'
 print FALSE or TRUE;       //prints nothing

我们知道FALSE or TRUE评估为TRUE,但令人惊讶的是,打印TRUE不会受到括号的影响!

  print (TRUE);     //prints '1'
  print TRUE;       //prints '1'

手册清楚地提到不需要使用括号!以下是手册中的引用..

  

print实际上并不是一个真正的函数(它是一种语言结构),所以你不需要在括号列表中使用括号。

我想知道的事情......

  • 这是一个错误吗?
  • 如果不是错误,括号如何影响输出?
  • 哪种方式可以使用括号或省略它们来预期输出?

我在Windows 8上使用PHP版本5.4.7。

谢谢!

2 个答案:

答案 0 :(得分:1)

print (FALSE or TRUE);     //prints '1'

评估FALSE or TRUE(赋予TRUE),然后打印该评估的结果

print FALSE or TRUE;       //prints nothing

打印FALSE(显示为空字符串);如果失败(或)则不执行TRUE

答案 1 :(得分:0)

这背后的原因是运营商优先级:http://php.net/manual/en/language.operators.precedence.php

看起来print具有与赋值运算符相同的运算符优先级,其优先级高于or

如果您使用||代替or

尝试相同的示例
print FALSE || TRUE; //1

打印值为1,因为||的优先级高于赋值运算符。

希望这是有道理的。