これにより、「オプション 1」が出力されます。何が悪いのかわかりません。
$result = (0 == 0) ? 'Option 0' : (1==2) ? 'Option 1' : 'Option 2';
ありがとう!
これにより、「オプション 1」が出力されます。何が悪いのかわかりません。
$result = (0 == 0) ? 'Option 0' : (1==2) ? 'Option 1' : 'Option 2';
ありがとう!
ここで、演算子の優先順位と三項演算子に問題があります。あなたの理解不足は、括弧を付けたところに現れます。確認してみましょう:
$result = (0 == 0) ? 'Option 0' : (1 == 2) ? 'Option 1' : 'Option 2';
^ ^ ^ ^
簡単だと言っているわけではありませんが、このコードがすでに示しているように、余分な丸括弧をここに配置しています。それらは必要ないだけです。これは、多くの場合、独自のコードに不確実性があることを示しています。正しいバリアントは次のようになります。
$result = 0 == 0 ? 'Option 0' : 1 == 2 ? 'Option 1' : 'Option 2';
さて、これは、括弧をどこに置くべきかについてあなたが不確かであることをすでに示しています. これについて知っていると、問題の解決策も含まれます。最初のチェックと 2 番目、2 番目のチェックを行うだけで、弱点を強みに変えることができますが、今回は実際に括弧を使用します。
$result = 0 == 0 ? 'Option 0' : (1 == 2 ? 'Option 1' : 'Option 2');
^ ^
これにより、期待どおりの結果が得られ、括弧コントロールの優先順位が意図したとおりになりました。
ヒント:このようなステートメントを記述するときにインデントを使用すると、決定木を見やすくすることができます。
$result =
0 == 0 ? 'Option 0'
: (1 == 2 ? 'Option 1'
: 'Option 2')
;
(または同様の)これを一目で読みやすくするためだけに。それが示すように、これは複雑な決定です。複雑なものと同様に、それらのコードを書く際のエラーはより頻繁に発生します。それは正常です。インデントを使用してコードを読みやすくしておくと役立ちます。もう 1 つの方法は、複雑さを軽減することです。
$decide = 2:
$results = array(
0 => 'Option 0',
1 => 'Option 1',
);
$result = isset($results[$decide]) ? $results[$decide] : 'Default Option';
ここでは決定が 1 つしか必要ないため、複雑さが軽減されます。この例は、可能性が 3 つ以上ある場合に意味がありますが、可能性が 3 つある場合でも、デフォルトのケースがあることがすぐにわかるため、これはすでに改善されている可能性があります。
グループ化括弧の 2 番目のセットを追加してみてください。
$result = (0 == 0) ? 'Option 0' : ((1==2) ? 'Option 1' : 'Option 2');
乾杯
2 番目のパスを引用符でグループ化する必要があります。
$result = (0 == 0)?'Option 0':((1==2)?'Option 1':'Option 2');
ところで:この予期しない動作のため、三項のネスト/スタッキングはお勧めしません。PHP ドキュメントhttp://php.net/manual/en/language.operators.comparison.phpを参照してください。
注: 三項式を「積み重ねる」ことは避けることをお勧めします。単一のステートメント内で複数の三項演算子を使用した場合の PHP の動作は、自明ではありません。
これを試して:
$result = (0 == 0)? 'Option 0':((1==2) ? 'Option 1' : 'Option 2');
出力:
Option 0
これは、右結合であることと関係があります (現在、ソースが見つかりません)。右側が最初に評価されます。したがって、この部分が最初に評価されます。
? 'Option 1' : 'Option 2';