php:operator precedence

mnemlml8  于 2023-04-04  发布在  PHP
关注(0)|答案(2)|浏览(87)

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

46scxncf

46scxncf1#

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

3gtaxfhh

3gtaxfhh2#

我认为@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 demonstr *:-D

相关问题