1

重複の可能性:
PHP でネストされた ?: 演算子を理解するにはどうすればよいですか?

なぜこれを行うのですか:

  $object->customer->phone =
          ! empty( $object->customer->address->phone_fixed ) ?
                    $object->customer->address->phone_fixed :
          ! empty( $object->customer->address->phone_mobile ) ?
                    $object->customer->address->phone_mobile :
          ! empty( $object->customer->address->phone_business ) ?
                    $object->customer->address->phone_business : '';

が設定されていて空でない$object->customer->address->phone_business場合でも、を返しますか?$object->customer->address->phone_fixed

ありがとうございました。

4

4 に答える 4

6

これは、三項演算子の結合性に関係しています。少なくともコードに括弧を追加します。しかし正直なところ...単一のステートメントで複数の三項は現代の偽物です。興味深いリンク

于 2012-07-06T14:52:32.553 に答える
4

あなたのデータがあなたが考えているものではないか(デバッグして確認してください)、ロジックが間違っています。

この短い if (三項演算子) は単純なifインライン代入に適していますが、わかりやすくするためにこれを/elseブロックにリファクタリングすることをお勧めします。

一度そうすれば、あなたの問題は明らかになると思います。そして、きれいなコードを書くことの要点を証明します。

于 2012-07-06T14:51:12.283 に答える
1

これが、このような複雑な代入に三項演算子を使用するのが得策ではない理由です。ただし、三項演算をネストするときは常に、必ず各演算を括弧で囲みます。

複数のif/elseorswitchステートメントを使用することをお勧めします。

if (!empty($object->customer->address->phone_fixed)
    $object->customer->phone = $object->customer->address->phone_fixed;
elseif (!empty($object->customer->address->phone_mobile)
    $object->customer->phone = $object->customer->address->phone_mobile;
elseif (!empty($object->customer->address->phone_business)
    $object->customer->phone = $object->customer->address->phone_business;
于 2012-07-06T14:59:50.860 に答える
1

ほとんどの場合、変数には、あなたが考えていることが含まれていない可能性があります。var_dump を使用して、デバッグを行ってください。

短い動作を使用してelseifを実行できることさえ知りませんでした。私があなただったら、そのコードのチャンクを書き直して、読みやすく、信頼性が高く、予測可能にするなどします.

私の意見では、単純に複数の if を記述した方が見栄えがよくなり、コードを読んだ人はすぐにそれを理解するでしょう。

// 質問に答えなくてすみません。

于 2012-07-06T14:50:53.970 に答える