8

我最喜欢 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

4 回答 4

17

PHP 返回truefalse. 但是你可以模拟 JavaScript 的r = a || b || c

$r = $a ?: $b ?: $c;

关于“和”,类似:

$r = ($a && $a->foo) ? $a->foo->bar : null;
于 2011-03-11T21:26:18.507 回答
9

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

例如,做:

$result = $a && $b;

将始终$result包含一个布尔值:truefalse-- 并且从不$a$b

于 2011-03-11T21:24:21.080 回答
2

您可以使用三元运算符设置类似的功能。

于 2011-03-11T21:32:11.743 回答
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";

查看实时代码

“Elvis”运算符“?:”仅在条件表达式为 false 时将结果分配给 $field。因此,如果 $param 和 $param->object 一样存在,那么您必须使用 NOT 运算符 ("!") 才能获得所需的结果。

您还可以通过使用 PHP 7 中的空合并运算符 ("??") 与get_object_vars().

于 2016-05-19T01:02:40.110 回答