PHP中逻辑表达式赋值与直接判断结果差异的原因解析
PHP赋值与
OR运算符优先级引发的变量值异常 问题场景
执行以下代码后,变量$test的值为false,无论直接输出还是通过if判断都不会触发预期输出:
$test = false OR false OR true; if ($test) { echo "IT'S TRUE"; }
但直接将逻辑表达式作为if条件时,却能正常打印“IT'S TRUE”:
if (false OR false OR true) { echo "IT'S TRUE"; }
根本原因
PHP中赋值运算符=的优先级低于逻辑或运算符OR,这导致第一条赋值语句被PHP解析为:
($test = false) OR false OR true;
执行顺序是先将false赋值给$test,后续的OR运算结果不会覆盖$test的值——即使后面的逻辑运算结果为true,也不会改变已经完成的赋值操作。
解决方案
通过括号强制改变运算优先级,让PHP先计算逻辑表达式的结果,再赋值给变量:
$test = (false OR false OR true); if ($test) { echo "IT'S TRUE"; // 此时会正常输出 }
内容的提问来源于stack exchange,提问作者Lomchat
相关产品推荐
相关产品推荐

