PHP逻辑运算符是否可用作JavaScripts?

时间:2011-03-11 21:20:13

标签: 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 its default value
    param = param || defaultValue;
    

PHP是否也允许使用逻辑运算符?

4 个答案:

答案 0 :(得分:13)

PHP返回truefalse。但您可以使用:

模拟JavaScript的r = a || b || c
$r = $a ?: $b ?: $c;

关于'ands',类似于:

$r = ($a && $a->foo) ? $a->foo->bar : null;

答案 1 :(得分:8)

PHP逻辑运算符不会在任何一方返回值:它们总是会给你一个布尔值。

例如,做:

$result = $a && $b;

永远使$result包含布尔值:truefalse - 永不$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的情况下获取字段数据的目标。