PHPの三項演算子で if / else 文を置き換える方法
PHPのif文を書く際に「三項演算子」というものがあることを最近知りました…調べてみると、ifやelseを省略してカンタンに書くことができるものらしいのですが、なかなか初心者にはわかりづらい…なので誰にでもわかるように解説しながらご紹介します。
PHPの三項演算子の使い方
置き換えのルールが決まっていて、こんな感じになっています。
【条件式】 ? 【真の場合】 : 【偽の場合】 ;
これを踏まえて、置き換えいってみましょー!
if / else 文の置き換え( echo だった場合)
一番わかりやすいのが「if / else」文をカンタンに置き換えることが出来るということなので、わかりやすく解説をしていきます。
「$score」が「100点」のときに「満点です」と出力して、「100点」でない場合は「満点ではありません」と出力する例です。5~9行目を置き換えます。
<?php
$score = "100点";
if($score == "100点"){
echo "満点です";
}else{
echo "満点ではありません";
}
?>
これを置き換えると
<?php
$score = "100点";
echo $score == "100点" ? "満点です" : "満点ではありません";
?>
初めてこの文を見た場合は「なにこれ?」ってなるかもしれませんが、最初のルールに則って置き換えられているのがわかるかと思います。
図で説明すると、
こういう風に書いてあると分かりやすいですよね! 三項演算子を「echo」するって感じです。
if / else 文の置き換え(変数だった場合)
下の例は、「$score」の値が「100点」であるときに変数「$result」に「満点です」を入れる if 文で、100点でない場合に「満点ではありません」が入る if 文です。これを実行すると「満点です」と表示されます。(if 文を見慣れている人にはわかりやすいですよね?)
この5~9行目を三項演算子に置き換えます。
<?php
$score = "100点";
if($score == "100点"){
$result = "満点です";
}else{
$result = "満点ではありません";
}
echo $result;
?>
置き換えると5行目の通りとなり、結果も同じになります。
<?php
$score = "100点";
$score == "100点' ? $result = "満点です" : $result = "満点ではありません";
echo $result;
?>
画像で説明するとこうなります。真の場合と偽の場合にそれぞれ変数の値が入っているのがわかりやすいです。
これだと変数を2回も書かなきゃいけないじゃん…って人にオススメな方法があります。変数を書くのを1回にできますよー!
詳しくは次の見出しへ!
if / else 文の置き換え(変数を省略したい場合)
実はもうひとつ置き換えの方法があって、出力される結果を変数に代入することができるんです! なんのことを言っているかってのは例を見ていただければ一目瞭然です。
まずは、先ほどと同じ通常の if / else 文です。
<?php
$score = "100点";
if($score == "100点"){
$result = "満点です";
}else{
$result = "満点ではありません";
}
echo $result;
?>
これを置き換えると…こんな感じで「$result = 」から書くことで後半の真偽の変数の定義を省略できるんです。
<?php
$score = "100点";
$result = ($score == "100点") ? "満点です" : "満点ではありません";
echo $result;
?>
画像で説明するとこうなり、最初に変数名を定義することができるので、最初のものよりも省略が可能になっています。
さらにここから「echo」の省略も可能です。1番最初に紹介した「echo だった場合」と同じになりますが…
<?php
$score = "100点";
echo $result = ($score == "100点") ? "満点です" : "満点ではありません";
?>
たったこれだけなんです! あんなに縦に長かったものがこんなに省略されてしまいました。三項演算子すごい…
ちなみに「()」がついているのですが、これも省略可能です。ただ、すごく見づらくなってしまうのでオススメはできません。どこまでが何なのかってのが追いづらくなってしまいます…
今回紹介したものは三項演算子の初歩なので見やすいものを紹介しましたが、調べるとこんなのも三項演算子らしいです…
if($a && $b){ funcAB(); }elseif($a){ funcA(); }elseif($b){ funcB(); }else{ funcN(); }
$a||$b?$a?$b?funcAB():funcA():funcB():funcN();
$a?$b?funcAB():funcA():($b?funcB():funcN());
(func.($a||$b?$a?$b?AB:A:B:N))();
(func.($a?$b?AB:A:($b?B:N)))();
ここまではさすがにと思うので、ちょっとずつ自分の出来る範囲の三項演算子を使って慣れていきましょう♪
ちなみに、私は上のQiitaの例文はまったく読めません!(笑)いつかさらっと読めるようになるといいな…
コメントはこちらから