做PHP';s逻辑运算符与JavaScript';s
我最喜欢JavaScript的一点是,逻辑运算符非常强大:做PHP';s逻辑运算符与JavaScript';s,php,logical-operators,operator-precedence,Php,Logical Operators,Operator Precedence,我最喜欢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 i
可用于安全提取对象字段的值,如果对象或字段未初始化,则返回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也允许使用逻辑运算符吗?PHP逻辑运算符不会在任何一侧返回值:它们总是会得到一个布尔值 例如,做:
$result = $a && $b;
将始终使
$result
包含一个布尔值:true
或false
——并且从不$a
或$b
PHP返回true
或false
。但您可以通过以下方式模拟JavaScript的r=a | | b | | c
:
$r = $a ?: $b ?: $c;
关于“ands”,类似于:
$r = ($a && $a->foo) ? $a->foo->bar : null;
您可以使用。修订版设置类似功能: 关于PHP中的逻辑ANDing以实现与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";
不,它们充当布尔表达式运算符,您将返回true或false。我正要发布相同的内容。请注意,PHP5.3.Wow中存在此功能。很高兴看到PHP支持GCC的?:
习惯用法。我使用的是PHP5.3.5。