1行でのif文 三項演算子を使った条件分岐PHP

PHP

1行でのif文 三項演算子を使った条件分岐 [PHP]

多くの言語で、疑問符 ? は if の置換として使うことが出来、if文の代わりに三項演算子によって評価することが出来ます。

三項演算子でif文を実施したい時に何を求めて調べているかといえば、判定結果の真偽値が右か左かどっちだったかという事なんですが、大体の記事で「ifでかくとこれと同じです」とか回りくどい内容が出てきます。

知りたいのはこれ、左が真、右が偽。ちなみにJavaScriptでも同じです。

(条件式) ? (真式) : (偽式);

// (条件式) ? (真式) : (偽式);
$magikarp_level = 19;
$evolution_flag = ($magikarp_level >= 20) ? "1" : "0";
var_dump($evolution_flag);
//"0"

「左が条件に一致する」時の結果、「右が一致しない」時の結果なので、この例だとコイキングはまだレベル19なので進化フラグが"0"のままでギャラドスになれないという事になります。

※ちなみに三項演算子の左側だけが必要な場合はこんな書き方も出来ます。

$conditions && $result=1;

$conditions == true の場合のみ $result=1になります。

 

たまに条件式を括弧で覆わない記述を見かけます。確かに括弧で覆わなくとも機能しますが、括弧はコードの可読性をより良くします。そのため、括弧を使う記述の方が推奨されます。

三項演算子は行が短くなりますが、反面読みにくくなります。これは人間の目はコードを縦に見ていくためです。そのため、複数行にまたがる構造の方が、長い水平な文よりも理解しやすいのです。

疑問符 ? の目的は、条件によって別の値を返すことです。異なるコードの分岐を実行するために if があります。

基本的にはif~elseを優先し、処理を切替えたいならif文を使い、変数の値を切替えたいなら三項演算子使うといった使い分けが良いです。

当たり前ですが、行数を短くするよりも、他人が理解するのにかかる時間を短くすべきということです。

  • この記事を書いた人

朝倉卍丸

シングルモルトスコッチなどのお土産を持ってきた人を助けるのが好きです。サービスの分割が重要ですが、まあ昔ながらの方法でやりたいこともありますよね。

よく読まれている記事

条件の0=0は全てが正であるを意味するSQL 1

SQLの条件に0=0のような記述を見かけます。 変わった書き方の条件ですが、これは「全てが正である」事を意味しており、結合条件の場合はCROSS JOINと同じです。 下記の例で言えば、結合するsub ...

DISTINCTを使わないで重複排除を考えるSQL 2

SQLのDISTINCTはEXISTSとかGROUP BYでなんとかする事もできます。 DISTINCTは暗黙的なソートがされますが、何のDBを使うにせよ過去のバージョンならともかく、最近のバージョン ...

RFC 5322に準拠させた正規表現言語別 3

RFC5322で定義されている正規表現を、各言語の正規表現に変化させた形になります。 完全な電子メール正規表現は存在しないので、結局のところ何かの公式基準に従っていたとしても、自分が携わるサービスのル ...

-PHP