php 当回显boolean false时,不打印任何文本

e3bfsja2  于 5个月前  发布在  PHP
关注(0)|答案(2)|浏览(65)

我在http://www.phpinterviewquestions.com/php-interview-questions/operator-precedence/找到这个问题
以下操作是true还是false?(运算符优先级)

$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(假的)。

5q4ezhmt

5q4ezhmt1#

这与优先级无关,而是与隐式类型转换有关
使用var_dump($a);代替echo $a;
$a实际上是false,但是被回显艾德false被转换为空字符串。

o8x7eapl

o8x7eapl2#

我认为@zerkms的答案(这不是错误的)不是正确的答案。
@vaanipala问题(我认为)是 * 为什么 * $btrue$afalse,如果两者都是由几乎相同的表达式生成的。
是的,它与PHP operator precedence有关。
$a = isset($one) && isset($two);可以重写为

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

字符串
这里没有什么新的或奇怪的,括号实际上是多余的。但是andor运算符的优先级比赋值运算符低**,所以这一行

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


内部分组如下:

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


第一个括号的值为true(因为=的优先级高于and),它被分配给$bisset($two)false,因此最后一行被处理为:

true and false


该运算符的结果是false,但是 * 它没有任何用处 *。所以......最后$afalse$btrue。*Quod erat demonstru *:-D

相关问题