いろいろな演算子を使ってPHPコードをスマートにしよう!
みなさん、if文はお好きでしょうか?
コードが太ってしまうので筆者はあまり好きではありません。
今回はそんなときに便利なPHPで使える演算子たちをいくつか紹介していこうと思います。
三項演算子(?:)
式の結果がtrueの場合は1つ目、falseの場合は2つ目の結果を返す演算子です。
1 2 3 4 5 6 7 8 |
例) $a = ''; $b = '文字列文字列'; $resultA = empty($a) ? 'aは空です' : $a; $resultB = empty($b) ? 'bは空です' : $b; echo $resultA; // aは空です echo $resultB; // 文字列文字列 |
empty($a) はtrueになるので1つ目の結果「aは空です」を返します。
empty($b) はfalseになるので2つ目の結果「文字列文字列」を返します。
上記の例は、下記のif文と同等になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$a = ''; $b = '文字列文字列'; if (empty($a)) { $resultA = 'aは空です'; } else { $resultA = $a; } if (empty($a)) { $resultB = 'bは空です'; } else { $resultB = $b; } echo $resultA; echo $resultB; |
if文で書くと5行になるコードが1行で書けるので、とてもスマートになります。
エルビス演算子(?:)
式の結果がtrueの場合は左辺、falseの場合は右辺を返す演算子です。
1 2 3 4 5 |
例) $a = '文字列文字列'; $resultA = $a ?: 'aは空です'; echo $resultA; // 文字列文字列 |
$a はtrueになるので左辺(=$a自体)を返します。
エルビス演算子は三項演算子でも書き表すことができます。
1 2 3 4 5 |
上記の例と同等) $a = '文字列文字列'; $resultA = $a ? $a : 'aは空です'; echo $resultA; |
式の結果をそのまま使いたいときはエルビス演算子、式の結果で返す値を変えたいときは三項演算子と使い分けられます。
Null合体演算子(??)
式の結果がNullの場合は右辺、そうでない場合は左辺を返す演算子です。
※PHP7系から実装されました。
1 2 3 4 5 |
例) $a = null; $resultA = $a ?? 'aはNullです'; echo $resultA; // aはNullです |
$a がNullなので右辺を返します。
Null合体演算子は三項演算子、エルビス演算子でも書き表すことができます。
1 2 3 4 5 6 7 8 9 10 |
上記の例と同等) $a = null; // 三項演算子の場合 $resultA = is_null($a) ? $a : 'aはNullです'; echo $resultA; // エルビス演算子の場合 $resultA = $a ?: 'aはNullです'; echo $resultA; |
エルビス演算子と似ていますが、formのpost値等Nullableの値を式に使う場合はNull合体演算子を使うことで、エラー回避の is_null() を使う必要がなくなり、よりスマートです。
宇宙船演算子
式の左辺のが大きければ1を、等しければ0を、右辺のが大きければ-1を返す演算子です。
※PHP7系から実装されました。
1 2 3 4 5 |
例) echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 'a' <=> 'b'; // -1 echo 'b' <=> 'a'; // 1 |
つまり上記の例の1つ目をif文で表すと、
1 2 3 4 5 6 7 8 |
上記の例と同等) if (1 < 1) { return -1; } elseif (1 > 1) { return 1; } else { return 0; } |
以上、以下、等価で条件分岐をすることは少なくないので、if文やswitch文の条件式にも使えます。
使いすぎには注意!!
まず下記のコードを見て下さい。
1 2 3 4 5 6 7 8 9 |
<?php $a = 1; $b = 10; $c = 100; $d = 'hoge'; $result = !is_string($a) ? !is_string($b) ? !is_string($c) ? !is_string($d) ? 'stringはありません' : 'dはstringです' : 'cはstringです' : 'bはstringです' : 'aはstringです'; echo $result. PHP_EOL; |
1番はじめに文字列がアサインされた変数名を返す三項演算子です。
if文で書くと下記のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $a = 1; $b = 10; $c = 100; $d = 'hoge'; if (is_string($a)) { $result = 'aはstringです'; } elseif (is_string($b)) { $result = 'bはstringです'; } elseif (is_string($c)) { $result = 'cはstringです'; } elseif (is_string($d)) { $result = 'dはstringです'; } else { $result = 'stringはありません'; } echo $result. PHP_EOL; |
三項演算子のほうがスマートではありますが、コードの保守性の観点で見るとif文のほうがロジックを理解しやすいと思います。
このように複数の演算子をネストしてしまうと、逆にコードの保守性が悪くなってしまう場合があるので用法用量を守って使うのが効果的です。
さいごに
PHPで使える演算子をいくつか紹介してきました。
自分で書いたコードでも3ヶ月も経つと忘れてしまいがちですが、コードをスマートにすることで改修やリバースエンジニアリングのコストを減らすことが可能です。
当記事が、3ヶ月後の自分にお叱りを頂いている方(筆者もですが…)や、これからPHPを始めるという初心者の方のお力になれたら幸いです。

ばね

最新記事 by ばね (全て見る)
- いろいろな演算子を使ってPHPコードをスマートにしよう! - 2022年7月20日
- 今話題のPHPフレームワーク「Laravel」を使ってみた(実装編) - 2022年3月28日
- 今話題のPHPフレームワーク「Laravel」を使ってみた(準備編) - 2022年1月21日
- コマンド一発でソースコードを本環境に!PHP製のDeployツール「Deployer」を使ってみた - 2021年9月22日
- 【PHP初心者向け】配列関数(array関数)を使って配列操作をスマートに書こう! - 2021年5月19日
関連記事
最新記事
FOLLOW US
最新の情報をお届けします
- facebookでフォロー
- Twitterでフォロー
- Feedlyでフォロー