8

私がJavaScriptで最も気に入っていることの1つは、論理演算子が非常に強力であることです。

  • &&オブジェクトのフィールドの値を安全に抽出するために使用でき、オブジェクトまたはフィールドのいずれかが初期化されていない場合は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 はtrueまたはを返しますfalse。ただし、次の方法で JavaScript をエミュレートできますr = a || b || c

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

「and」に関しては、次のようなものです。

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

PHP の論理演算子は、どちらの側でも値を返しません。常にブール値を取得します。

たとえば、次のようにします。

$result = $a && $b;

常に$resultブール値の :trueまたはfalse-- を含み、決して$anoを含まないようにします$b

于 2011-03-11T21:24:21.080 に答える
2

三項演算子を使用して同様の機能を設定できます。

于 2011-03-11T21:32:11.743 に答える
1

改訂:

JavaScript と同じ種類の結果を達成するための PHP の論理 AND に関しては、次のように、従来の 3 項式の変形を使用できます。

<?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 で null 合体演算子 ("??") を と併用することで、AND を使用せずにフィールド データを取得するという目的を達成することもできますget_object_vars()

于 2016-05-19T01:02:40.110 に答える