PHP的逻辑运算符和JavaScript的一样吗?

8

我最喜欢JavaScript的一点是它的逻辑运算符非常强大:

  • && can be used to safely extract the value of an object's field, and will return null if either the object or the field has not been initialized

    // returns null if param, param.object or param.object.field
    // have not been set
    field = param && param.object && param.object.field;
    
  • || can be used to set default values:

    // set param to its default value
    param = param || defaultValue;
    

PHP是否也允许使用逻辑运算符进行这种操作?


不,它们作为布尔表达式运算符,你会得到真或假。 - Orbling
4个回答

17

PHP返回truefalse。但你可以使用以下代码模拟JavaScript的r = a || b || c:

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

关于“ands”,可以像这样:

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

2
我正要发布同样的内容。请注意,此功能存在于PHP 5.3中。 - Lekensteyn
哇,很高兴看到PHP支持GCC的?:习惯用法。而且我正在使用PHP 5.3.5。 - isekaijin
PHP的?:与JavaScript的||类似。但是也许在PHP中没有相应的&&等价物。 - PHP Guru

9

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

例如,执行以下操作:

$result = $a && $b;

这段代码将始终使$result包含一个布尔值:truefalse,而不是$a$b


2

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()一起使用空合并运算符(“??”)来实现获取字段数据的目标,而无需执行AND操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接