こんにちは。タンブラーを買い、ますますパソコンの前から離れなくなってしまったひろです。
「phpのif文を使うとき、ちょっとした分岐だけどいちいち書くのはめんどくさいなぁ……」
「if文を使ってみたけど分岐が分かりづらい……もっとわかりやすい方法はないかなぁ?」
と思ったことはありませんか?
phpの開発において必須なif文ですが、このif文を簡潔に書く方法をお伝えします。これを使えば、あなたのphpのコードがぐっと見やすくなるかもしれません。それでは、詳しく見ていきましょう。
目次
phpのif文についてのおさらい
まずは、phpのif文の使い方についてサラッと見ていきましょう。
if(条件式){処理}
まずは最も基本的なif文です。
1 2 3 4 5 |
$test_score = 55; if($test_score >= 60){ echo '合格です。'; } |
上の例では、まず$test_scoreという変数を定義し、その上でその変数の中身が60以上であれば合格と出力してください、というif文です。今回は$test_scoreは60以上ではないので、なんの処理も実行されません。
if(条件式){処理1}else{処理2}
今回は、後ろにelse{処理2}がついています。こうすると、「そうでない場合は処理2を行う」という文を追加できます。
1 2 3 4 5 6 7 |
$test_score = 55; if($test_score >= 60){ echo '合格です。'; }else{ echo '不合格です。'; } |
上の例でいうと、$test_scoreという変数を定義し、その変数の中身が60以上であれば合格、それ以外は不合格と出力してくださいというif文ですね。この例では$test_scoreが60以上ではないため、「不合格です。」と出力されます。
if(条件式1){処理1}elseif(条件式2){処理2}else{処理3}
今回は、ifとelseの間にelseif(条件式2){処理2}というのが追加されています。これは、「そうでなくて(条件式2)に当てはまる場合は処理2を行い、いずれにも該当しなければ処理3を行う」というif文になります。
1 2 3 4 5 6 7 8 9 |
$test_score = 55; if($test_score >= 60){ echo '合格です。'; }elseif($test_score >= 50){ echo '補欠合格です。'; }else{ echo '不合格です。'; } |
上記の例であれば、「60以上であれば合格、60未満50以上は補欠合格、それ以外は不合格と出力してください」というif文になります。今回は60未満50以上なので「補欠合格です。」と出力されます。
また、このelseif~はいくつでも追加できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$test_score = 55; if($test_score >= 80){ echo '最優秀点です。'; }elseif($test_score >= 70){ echo '優秀点です。'; }elseif($test_score >= 60){ echo '合格です。'; }elseif($test_score >= 50){ echo '補欠合格です。'; }else{ echo '不合格です。'; } |
このように、elseifを複数使うことにより、複数の条件によって分岐させる事ができます。今回の場合は、以下のように条件分岐がされています。
- 80以上である場合。
- 80以上でなく、70以上。
- 70以上でない、60以上。
- 60以上でない、50以上。
- 50以上でない場合。
このelseifを使うことにより、複雑な条件分岐を作成することも可能です。
phpのif文を一行で記述する方法
条件と処理がそれぞれ1つなら{}を省略できる
基本的なif文であるif(条件式){処理}の場合、一行で表現できます。
1 2 3 4 |
$test_score = 60; if($test_score >= 50 echo '合格です。'; |
三項演算子をつかうことでif~else文も一行で記述できる
if~else文も1行で記述することができます。このやり方はちょっと難しいですが、慣れると非常に扱いやすいです。
1 2 3 |
$test_score = 55; echo ($test_score >= 60) ? '合格です。' : '不合格です。'; |
この文はなんとifが使われていません。これをifを使って記述すると以下のようになります。
1 2 3 4 5 6 7 |
$test_score = 55; if($test_score >= 60){ echo '合格です。'; }else{ echo '不合格です。'; } |
ifを使って書くと5行かかるところを、1行で記述することができます。この一行での記述方法を「三項演算子」と呼び、実際の現場でも使われています。記述量が少なくなり、また保守性も高いためです。
もしも値が空だったときにデフォルト値の設定ができる「Null合体演算子」
こちらはちょっと特殊な演算子である「Null合体演算子」というものを使います。これは、値にnullが入った場合に別の値を入れることができる演算子です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php // $_POST['user_id'] が存在しない場合は // 'guest_id' が代わりに入ります。 $user_id = $_POST['user_id'] ?? 'guest_id'; // 先ほど紹介した三項演算子を用いて記述すると、 // 以下のように記述できます。 $user_id = isset($_POST['user_id']) ? $_POST['user_id'] : 'guest_id'; // if文を用いて記述すると以下のようになります。 if(isset($_POST['user_id'])){ $user_id = $_POST['user_id']; }else{ $user_id = 'guest_id'; } // null合体演算子を連結することもできます。次のように書くと、 // $_POST['user_id']、$_GET['user_id'] そして 'guest_id'の順に調べ、 // 空ではない最初の値を返します。 $user_id = $_POST['user_id'] ?? $_GET['user'] ?? 'guest_id'; ?> |
ログイン機能にゲストログイン機能を実装する際や、ログイン判定などいろいろな場所で使うことができますが、扱い方が難しいので使えるようになると上級者への第一歩となります。
一行で記述する場合の注意点
非常に便利なif文の省略形ですが、扱う際には注意が必要です。
{}を省略すると、目視でif文の終わりがわかりづらくなる
{}を使う場合と使わない場合を実際に比べてみると、わかりやすくなると思います。
1 2 3 4 5 6 7 |
$test_score = 55; if ($test_score >= 60) echo '合格です。'; if ($test_score >= 60) { echo '合格です。'; } echo $test_score; |
このような文を見てみると、if文がどこからどこまでなのか、というのが分かりづらいです。このわかりづらさというのは、現場ではミスを生む原因になりえます。
過去には、プログラミング言語は違いますが、appleにてこの波括弧を省略する記述方法を使用した際のミスにより、重大なセキュリティホールを作ってしまったことがあります。
https://www.imperialviolet.org/2014/02/22/applebug.html
(英語記事になります)
このように、バグが発生するかもしれない、ということは念頭に入れ使用していく必要があります。
まとめ
いかがでしたか?今回は、
を紹介しました。ぜひ今後のウェブ開発に生かしてみてくださいね。
参考:
https://www.php.net/manual/ja/migration70.new-features.php