首页 > 解决方案 > && 和括号的 PHP 优先级

问题描述

根据手册

如有必要,括号可用于强制优先级。

但是,似乎 && 仍然更高:

$var = null;
var_dump($var && ($var->a() || $var->b()) && $var->c());

由于括号,我希望($var->a() || $var->b())首先被评估,并为缺少的方法抛出错误。但是,结果bool(false)没有错误。怎么会这样?

标签: php

解决方案


来自官方 PHP 文档

// foo() will never get called as those operators are short-circuit

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

参见短路评估


推荐阅读