我在http://www.phpinterviewquestions.com/php-interview-questions/operator-precedence/找到这个问题
以下操作是真还是假?(运算符优先级)
$one = true;
$two = null;
$a = isset($one) && isset($two);
$b = isset($one) and isset($two);
echo $a.'<br>';
echo $b;
我尝试了上面的代码。但是只有$b被回显为1(这是真的)。$a没有被回显。可能是什么原因呢?我期望$a为0(假的)。
2条答案
按热度按时间46scxncf1#
这不是关于优先级,而是关于隐式类型转换
使用
var_dump($a);
代替echo $a;
$a
实际上是false
,但是被回显艾德false
被转换为空字符串。3gtaxfhh2#
我认为@zerkms的答案(这不是错误的)不是正确的答案。
@vaanipala问题(我认为)是 * 为什么 *
$b
是true
和$a
是false
,如果两者都是由几乎相同的表达式生成的。是的,它与PHP operator precedence有关。
$a = isset($one) && isset($two);
可以重写为没有什么新的或奇怪的,括号实际上是多余的。但是
and
和or
运算符的优先级**低于赋值运算符,所以这一行内部分组如下:
第一个括号的值为
true
(因为=
的优先级高于and
),该值被分配给$b
。isset($two)
是false
,因此最后一行被处理为:该运算符的结果是
false
,但是 * 它无处可去 *。因此......在最后$a
是false
,$b
是true
。*Quod erat demonstr *:-D