🌊

PHPの便利技:三項演算子

2023/01/15に公開

三項演算子とは

https://www.php.net/manual/ja/language.operators.comparison.php

三項演算子とは、if文の短縮形のような書き方です。

(変数) = (評価) ? (評価がtrueの場合の値) : (評価がfalseの場合の値);

if文との違いは、変数の代入(初期化)の時に使いやすいという点です。

if文

if( $foo ){
    $var = true;
}else{
    $var = false;
}

三項演算子

$var = $foo ? true: false;

上記のif文と三項演算子ですが、条件として評価する値 $foo が未定義の場合は未定義エラーが発生します。その場合は、NULL合体演算子も併用すると、便利で読みやすく書くことができます。

https://zenn.dev/phpbeginners/articles/e58863231a8b0c

?: ← エルビス演算子

?: は、三項演算子の短縮形です。エルビス演算子とも言いますが、これは正式名称ではありません。エルビス・プレスリーの顔文字に似ているからだそうです。

"評価"が変数でtrueなら、"評価"の値が入る) = (評価) ?:"評価"の変数がfalseの場合の値);

NULL合体演算子https://zenn.dev/phpbeginners/articles/e58863231a8b0c)との違いは、未定義の値を評価すると未定義エラーが発生します。

index.php
<?php
error_reporting(E_ALL);
$var = $undefined ?: 'default value'; // ← $undefinedは、未定義エラーになります
var_dump($var);
?>

変数が未定義の場合の対応をしつつ、省略形の三項演算子を使うには、NULL合体演算子の複合技を使います。

index.php
<?php
error_reporting(E_ALL);
$var = ($undefined ?? null) ?: 'default value'; // ← $undefinedが未定義の場合はNULLが代入されます
var_dump($var);
?>

Discussion