PHPの三項演算子(Ternary Operator)のメモ

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' の値が空の場合は、空になる

最後に

ソースコードはシンプルにわかりやすく が基本なので、「こんな書き方できるよなあ」と思い出せるようにメモしておきました。

無理して覚える必要はないけど、いつでも参照しておけるようにするのは大事です。まあ覚えておけば、参照する手間がなくなるので時短になりますが。

ITPHP

Posted by まるパパ