PHPで if文を減らして、ソースコードをシンプルに読みやすくするための小技です。
三項演算子とは
三項演算子とは、比較や条件分岐を行う際にコードの長さを短くする条件分岐演算子です。
条件によって変数に代入する値を決めたい、なんて時に使います。これを使うと、if-elseやネストされたif-else文を省略することができます。
例えば、 if文を使う次のような処理ですが、
<?php
$lang = 'English';
if ($lang == 'Japanese') {
$msg = 'こんにちは';
}
else {
$msg = 'Hello';
}
print $msg;
?>
三項演算子を使うと、
<?php
$lang = 'English';
$msg = $lang == 'Japanese' ? 'こんにちは' : 'Hello';
print $msg; // Hello が出力される
?>
6行だったのが、1行にまとめられてしまいます。
三項演算子の利点は次の3つだと思います。
- コードを短くすることができる
- コードの可読性が高まる
- コードがシンプルになる
三項演算子の種類
色々な書き方があります。
条件が2つ
前章の例と同じです。
$lang
が 'English' の場合は 'Hello' となり、'Japanese' の場合は 'こんにちは' となります。
<?php
$lang = 'English';
$msg = $lang == 'Japanese' ? 'こんにちは' : 'Hello';
print $msg; // Hello が出力される
?>
簡略化して条件を1つにする
真ん中の部分を省略して簡略化することもできます。エルビス演算子とも呼ばれるようで、条件の冗長性を減らして、代入の長さを短くすることができます。
<?php
$msg = '';
$msg = $msg ?: 'Hello';
print $msg; // Hello が出力される
$msg = 'こんにちは';
$msg = $msg ?: 'Hello';
print $msg; // こんにちは が出力される
?>
NULLチェック
配列のキーが存在する場合はその値を設定して、それ以外は指定した値を設定する場合に使います。
$msg = [
'English' => 'Hello',
'Japanese' => 'こんにちは',
];
$msg = $msg['Japanese'] ?? 'Hello';
print $msg; // こんにちは が出力される
$msg = [
'English' => 'Hello',
'Japanese' => 'こんにちは',
];
$msg = $msg['Spanish'] ?? 'Hello';
print $msg; // 'Spanish' は配列にないので、Hello が出力される
$msg = [
'English' => 'Hello',
'Japanese' => 'こんにちは',
'Spanish' => '',
];
$msg = $msg['Spanish'] ?? 'Hello';
print $msg; // 'Spanish' の値が空の場合は、空になる
最後に
ソースコードはシンプルにわかりやすく が基本なので、「こんな書き方できるよなあ」と思い出せるようにメモしておきました。
無理して覚える必要はないけど、いつでも参照しておけるようにするのは大事です。まあ覚えておけば、参照する手間がなくなるので時短になりますが。