这更像是“为什么会起作用”和“为什么或为什么不使用它”类型的问题。
我们都知道使用三元运算的PHP表达式
$var = (isset($i) ? true:false);
但在PHP中,以下内容也起作用。 (它不是三元的,3部分,它更像是二元操作,2部分。)
$var = true;
isset($i) || $var = false;
这可能不那么实用:)但是更有用的结构是
isset($i) || exit();
所以上面的(好看的imo)和
会有相同的结果if(!isset($i)) exit();
但除了常见的
defined('CONSTANT') || define('CONSTANT','FOO');
我很少看到PHP中使用的这种类型的构造。为什么这样做?这叫什么。为什么不教导或使用更多。是否有使用它的利弊?是否有实用的方法以同样的方式使用&&
?
答案 0 :(得分:1)
这种编写语句的方式也存在于C,Perl和其他语言中,它与编译器如何评估与逻辑运算符链接的语句有关。
想象一下,你有一个表达式if (a() or b())
,然后当a()
返回true时你不必评估b()
,因为整个陈述已经是真的。因此b()
仅在a()
为假时调用。您可以在没有if
的情况下编写此代码,但它的工作方式仍然相同。
通常可以像您所描述的那样找到这种速记,以定义默认值,或者如果不满足条件则退出。