当回显布尔值 false 时,不打印任何文本

问题描述 投票:0回答:2

我在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(假)。

php operator-keyword operator-precedence
2个回答
6
投票

这与优先级无关,而是关于隐式类型转换

使用

var_dump($a);
代替
echo $a;

$a
实际上是
false
,但是被回显的
false
被转换为空字符串。


1
投票

我认为@zerkms的答案(没有错)不是正确的答案。

@vaanipala问题(我认为)是为什么

$b
true
$a
false
如果两者实际上是由相同的表达式生成的。

是的,它与 PHP 运算符优先级有关。

$a = isset($one) && isset($two);
可以重写为

$a = (isset($one)) && (isset($two));

没有什么新的或奇怪的,括号实际上是多余的。但是

and
or
运算符的优先级低于赋值运算符,所以该行 $b = isset($one) and isset($two);

内部分组如下:

($b = isset($one)) and (isset($two));

第一个括号的值为 
true

(因为

=
的优先级高于
and
),该值被分配给
$b
isset($two)
false
,所以最后一行被处理为:
true and false

该运算符的结果是 
false

,但是

它无处可去
。所以...最后$a
false
$b
true
Quod erat demostrandum
:-D

© www.soinside.com 2019 - 2024. All rights reserved.