• 締切済み

三項演算子(PHP)について

次の判定をしたいのですが、正しい値が返ってきません。 PHPマニュアルには「三項演算子を"積み重ねて"使用することは避けましょう。ひとつの文の中で複数の三項演算子を使用した際のPHPの振る舞いは、少々わかりにくいものです。」という記述がありますが、PHPで正しく判定する方法はありますか。 (1) 総所得金額($income)が、33万円($deduction)を超えない世帯は、7割軽減されます。 (2) 総所得金額が、33万円に被保険者($people)(当該納税義務者を除く。)1人につき245,000円を加算した金額を超えない世帯は、5割軽減されます。 (3) 総所得金額が、33万円に被保険者1人につき35万円を加算した金額を超えない世帯は、2割軽減されます。 $income = $income <= $deduction ? '0' : $income - $deduction; $judge = ($income = '0') ? '7割軽減' : ($income < ($people - 1) * '245000') ? '5割軽減' : ($income < $people * '350000') ? '2割軽減' : ''; PHP マニュアル http://www.php.net/manual/ja/index.php

みんなの回答

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.5

> 「大人しく」の意味が分かりません。 ご存じのように、条件が単純な場合は三項演算子を使うことでシンプルなコードを書くことができます。 が、複数の条件が重なる場合などはif文を使った方が可読性が上がりますし(自分にとっても、他人にとっても)、 可読性が上がることで論理バグを防ぐことができます。 シンプルさを追求することも大事ですが、最も優先すべきはクオリティではないでしょうか?

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

他の多くの言語の三項演算子は、右結合なので if a then b elseif c then d else e のように直感的に使用できますが、PHPの三項演算子はマニュアルに繰り返し書いているように左結合なので、あなたのしたいようにするには括弧をたくさん付ける必要があります。 他の言語では、こう書くところが、 a ? b : c ? d : e PHPでは、こう書く必要がある。 a ? b : ( c ? d : e ) >「三項演算子を"積み重ねて"使用することは避けましょう。ひとつの文の中で複数の三項演算子を使用した際のPHPの振る舞いは、少々わかりにくいものです。」 マニュアルページのその文のすぐ下にわかりやすい例があるのに、目に入らなかったのでしょうか?

OKWave_Kaz
質問者

お礼

回答ありがとうございました。 正しく判定することができました。 PHPを使い初めて3日目で、マニュアルのやりたい項目だけしか見ていませんでした。また、恥かしながら、わかりやすい例が目に入ってもほとんど理解できません。 「if」よりも「三項演算子」のほうがシンプルそうだったので使ってみました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

#2 の通りだろうね. ちなみに「正しい値が返ってきません」のような表現は質問としてよくない. ・どのような状況で ・どのような値が得られることを期待していて ・実際にはどのような値が得られたのか くらいは書けるはず (だし明確な答えがほしければ書くべき).

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.2

あ、あとここは明らかに間違っています。  × $judge = ($income = '0') ? '7割軽減' :  ○ $judge = ($income == '0') ? '7割軽減' :

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

中身は見ていませんが、大人しくif文を使えばいいのでは? 三項演算子にこだわる必要はありますか?

OKWave_Kaz
質問者

補足

「大人しく」の意味が分かりません。

関連するQ&A