【PHP】コードをシンプルに書くために便利な演算子
2021.05.28
本記事では三項演算子を始めとして、プログラムのコードを省略して書くのに便利な演算子を紹介します。
これらの演算子はコードをシンプルに書く上では非常に有用ですが、他の人が見た時にわかりにくいコードになってしまう側面もあります。
むやみに使う事は推奨できませんが、使い分ける技術も含め、プログラマのスキルのひとつとして身につけると便利な技術になります。
演算子とは
まず前提として演算子とは何か、という説明をします。
実は一口に演算子と言ってしまうと非常に多くの種類が存在するため、ここでは簡単な例を挙げ、演算子とはどんなものなのかという理解をして頂ければと思います。
プログラム例
以下のようなプログラムがあります。
$ans = $a + $b;
このプログラムでは、代入を行う「=」と、加算を行う「+」が演算子と呼ばれるものです。
また、以下のようなプログラムがあります。
if ( $a < $b){
echo ‘aはbより小さい’;
}else{
echo ‘aはb以上’;
}
この場合は、$aと$bを比較している「<」が演算子です。
このように演算子とは、プログラムを書く上で日常的に使っているものになります。
三項演算子
では冒頭に述べた三項演算子とはどんなものなのか例を挙げて紹介します。
三項演算子とは
三項演算子とは以下のような形の式です。
〇〇 ? △△ : □□
この式は〇〇が成立した場合△△を、成立しない場合□□を返すという式です。
プログラム例
前項の例で上げたプログラムを三項演算子を使って書き直してみます。
$ans = $a < $b ? ‘aはbより小さい’ : ‘aはb以上’;
echo $ans;
処理内容としては、変数$aと$bを比較して、その結果を表示するものです。
このように、if文を使うと複数行になる処理を1行で書くことができるため、コードをシンプルにすることができます。
ただし、式の中に処理を書くことはできません。
例えばこのような書き方はエラーになります。
$a < $b ? echo ‘aはbより小さい’ : echo ‘aはb以上’;
三項演算子の使い所
三項演算子というのはあくまで演算子のため、〇〇 ? △△ : □□ という形の、〇〇の結果によって△△か□□を返すというひとつの式になります。
基本的に三項演算子でできることはif文で書けます。
受け取る値を条件によって変えたいような場合は三項演算子が使える、という認識が良いと思います。
条件によって行う処理が変わるような場合は素直にif文を使いましょう。
エルビス演算子
エルビス演算子とは
続いてはエルビス演算子を紹介します。
エルビス演算子は、三項演算子の条件成立時の式を省略した形になります。
プログラム例
式としては以下のように記述します。
〇〇 ?: □□
この式は〇〇が成立した場合〇〇を、成立しない場合□□を返すという式です。
ちなみに、三項演算子で同じ処理を書いた場合は以下のようになります。
〇〇 ? 〇〇 : □□
ここで言う〇〇が成立しないとは、〇〇がfalseとして判定される、0や空文字列、空の配列等の場合です。
これがどのような場合に便利かというと、PHPでパラメータを受け取る場合、以下のようなコードを書くことが多いのではないでしょうか。
if($_GET[‘PARAM’]){
$param = $_GET[‘PARAM’];
}else{
$param = ‘DEFAULT_PARAM’;
}
Getパラメータが入っていたらパラメータの値を、入っていなかったらデフォルトの値を入れるという処理です。
この処理をエルビス演算子を使って書くと以下のようになります。
$param = $_GET[‘PARAM’] ?: ‘DEFAULT_PARAM’;
エルビス演算子の使い所
このように、パラメータの初期設定をする場合などとてもスッキリと書くことができます。
ただし、上記の$_GET[‘PARAM’]等、未定義の可能性がある場合はnotice、フレームワークによってはエラーが発生する場合があります。
ですので、エルビス演算子の条件に使う場合は、定義されている保証のある変数を使うようにしましょう。
null合体演算子
null合体演算子とは
null合体演算子は以下のように記述します。
〇〇 ?? □□
この式は〇〇がnullだった場合のみ□□を返し、nullでなければ〇〇を返します。
プログラム例
三項演算子で書くと以下のようになります。
!is_null(〇〇) ? 〇〇 : □□
少しわかりにくいので、エルビス演算子で挙げたプログラムの例で書くとこうなります。
if(!is_null($_GET[‘PARAM’])){
$param = $_GET[‘PARAM’];
}else{
$param = ‘DEFAULT_PARAM’;
}
そしてnull合体演算子で書くとこうなります。
$param = $_GET[‘PARAM’] ?? ‘DEFAULT_PARAM’;
この場合、$_GET[‘PARAM’]はnullであるか否かを判定しているため、0や空文字列の場合もそのまま$paramに入る事になります。
この点がエルビス演算子と大きく異なる点です。
null合体演算子の使い所
例に挙げたようにパラメータを受け取る際に使用すると非常に便利です。
特に変数が未定義の可能性がある場合は、エルビス演算子ではなくnull合体演算子を使うべきです。
まとめ
三項演算子を始めとして、いくつか特殊な演算子を紹介させて頂きました。
これらはうまく使うとコードもシンプルに書くことができ、とても便利なものです。
ですが、上手く使わないと逆にコードが見にくくなったり、バグの原因になったりもします。
まずは基本をしっかり身につけプログラムが書けるようになった後、次のステップとしてこのような演算子を使ったコードを書いてみるのが良いと思います。
関連