我最喜欢JavaScript的一个原因是逻辑运算符非常强大:
&&
可用于安全地提取对象字段的值,如果对象或字段尚未初始化,则返回null
// returns null if param, param.object or param.object.field
// have not been set
field = param && param.object && param.object.field;
||
可用于设置默认值:
// set param to its default value
param = param || defaultValue;
PHP是否也允许使用逻辑运算符?
答案 0 :(得分:13)
PHP返回true
或false
。但您可以使用:
r = a || b || c
$r = $a ?: $b ?: $c;
关于'ands',类似于:
$r = ($a && $a->foo) ? $a->foo->bar : null;
答案 1 :(得分:8)
PHP逻辑运算符不会在任何一方返回值:它们总是会给你一个布尔值。
例如,做:
$result = $a && $b;
永远使$result
包含布尔值:true
或false
- 永不$a
或$b
。
答案 2 :(得分:2)
您可以使用ternary operators设置类似的功能。
答案 3 :(得分:1)
<强>修强>:
关于PHP中的逻辑AND,以获得与JavaScript相同的结果,您可以使用传统三元的变体,如下所示:
<?php
// prelim
$object = new stdClass;
$object->field = 10;
$param = new stdClass;
$param->object = $object;
// ternary variant
$field = !($param && $param->object)?: $param->object->field;
echo $field,"\n";
// alternative to ANDing
$field = get_object_vars( $param->object )["field"] ?? null;
echo $field,"\n";
请参阅live code
&#34;猫王&#34;运营商&#34;?:&#34;如果条件表达式为false,则仅将结果分配给$ field。因此,如果$ param以及$ param-&gt;对象存在,那么你必须使用NOT运算符(&#34;!&#34;)才能获得所需的结果。通过在PHP 7中与get_object_vars()
一起使用空合并运算符(&#34; ??&#34;),您也可以实现在不使用AND的情况下获取字段数据的目标。