<?php
$sample = (False or 436);
echo $sample;
?>
我尝试使用此代码来识别并了解运算符优先级对代码的影响。但我对我得到的答案感到困惑。
<?php
$sample = (False or 436);
echo $sample;
?>
给出答案为1
<?php
$sample = (True or 436);
echo $sample;
?>
也提供1
<?php
$sample = False or 436;
echo $sample;
?>
什么都没有。
我可以看到or
旁边的任何内容,答案是1
P.S。我在http://sandbox.onlinephpfunctions.com/
这个在线编辑器上尝试过它们。
我需要知道它背后的实际概念。
答案 0 :(得分:1)
这背后的原因是运营商优先级。如果删除括号,则赋值$sample = false
优先于or 436
函数。结果是echo false
,它不输出任何内容。这就是为什么你在大多数情况下应该使用||
运算符。
更多信息:http://php.net/manual/en/language.operators.precedence.php
答案 1 :(得分:1)
您可能希望阅读PHP Type Comparison Tables以及Booleans documentation。请特别注意Fred Koschara在顶部注释中的注释,这解释了OR运算符的优先级低于赋值运算符。您可能希望使用||而不是OR,作为||运算符执行相同的操作,但具有更高的优先级。
答案 2 :(得分:0)
由于我得到的所有答案,我可以在一个答案中找到我发布的内容。我认为这可能会有所帮助。
<?php
$var1 = TRUE;
$var2 = FALSE;
$var3 = 123;
$x = (int)$var2 or $var3;
echo $x;// $x assigned to $var2 and type cast into int-display 0
$y = ($var2 or $var3);
echo $y;//operation inside the () returns true. so it prints 1
$n = ($var2 or $var2);
echo $n;//operation inside the () returns false.It concider as NULL. display nothing
echo (int)$n;//print numerical value for false-0
$z = $var2;
echo $z;//returns 0. It is considered as NULL. so display nothing
?>
这是我真正期望的确切答案。感谢。