PHP でのヌル合体とエルビス演算子

Subodh Poudel 2023年1月30日
  1. PHP の Elvis オペレーター
  2. PHP のヌル合体演算子
PHP でのヌル合体とエルビス演算子

この記事では、デモンストレーションを使用して、PHP の null 合体演算子と Elvis 演算子を区別します。

PHP の Elvis オペレーター

まず、Elvis オペレーターについて教えてください。PHP Elvis 演算子は、三項演算子の省略形の演算子です。

三項演算子の修正形とも言えます。PHP Elvis 演算子を理解するには、三項演算子とその動作を理解する必要があります。

三項演算子は、単純な比較を実行したり、単純なステートメントを持つ条件をチェックしたりするために使用される条件付き演算子です。これは、if-else ステートメントの短いバージョンです。

条件付き操作を実行するコードの長さを短縮します。操作の順序は左から右です。

構文:

condition? statement1 : statement2;

三項演算子では、最初に条件が評価されます。条件が真の場合は statement1 が実行され、条件が偽の場合は statement2 が実行されます。

条件、true の結果ステートメント、false のステートメントの 3つのオペランドを取るため、三項演算子と呼ばれます。

サンプルコード:

<?php
$marks = 80;
$result = $marks >= 40 ? 'Pass': 'Fail';
echo $result;
?>

上記の例では、$marks >= 40 の条件が真であるため、Pass が表示されます。

出力:

Pass

それでは、Elvis オペレーターを見てみましょう。三項演算子とは少し異なります。2 番目のオペランド(conditionstatement2 の間)を省略し、さらに短くします。

構文:

condition?:statement;

ここで、condition が true と評価された場合、condition を返します。それ以外の場合は、statement を返します。

上記の Elvis 構文の 3 値表現を以下に示します。

conditon ? condition : statement;

注:PHP では、0falseNULL""[]"0"などの値は false 値と見なされます。

Elvis オペレーターの例をいくつか見てみましょう。

サンプルコード:

<?php
$name = "John Doe";
$yourName = $name ?: 'No name';
echo $yourName."<br>";

$marks = "";
$yourMarks = $marks ?: 'No marks';
echo $yourMarks."<br>";

$address = null;
$yourAddress = $address ?: 'No Address';
echo $yourAddress."<br>";

$age = false;
$yourAge = $age ?: 'No age';
echo $yourAge."<br>";
?>

出力:

John Doe
No marks
No Address
No age

$name 変数は true を返すため、変数の値が評価されます。残りの場合、変数 $ mark$address、および $agefalse を返すため、右側のオペランドが評価されます。

したがって、Elvis 演算子の出力は、条件の true または false 状態に依存すると結論付けることができます。

PHP のヌル合体演算子

null 合体演算子は、指定された変数が null であるかどうかをチェックし、値のペアから null 以外の値を返します。null 合体演算子の出力は、変数が null であるかどうかによって異なります。

それを理解するために以下の構文を見てみましょう。

statment1 ?? statement2;

ここで、statment1 が null と評価された場合、statment2 が返されます。statement1 が null 以外の値の場合、それが返されます。

null 合体演算子では、statement の値が false0、または''のいずれであるかは関係ありません。statement に偽の値がある場合でも、その値が返されます。

これが、Elvis 演算子と null 合体演算子の主な違いです。null 合体演算子のいくつかの例は次のとおりです。

サンプルコード:

<?php
$name = "John Doe";
$yourName = $name ?? 'No name';
echo $yourName."<br>";

$marks = "";
$yourMarks = $marks ?? 'No marks';
echo $yourMarks."<br>";

$age = false;
$yourAge = $age ?? 'No age';
echo $yourAge."<br>";

$address = null;
$yourAddress = $address ?? 'No Address';
echo $yourAddress."<br>";
?>

出力:

John Doe


No Address

ここで、変数 $name が true の場合、評価されて出力セクションに出力されます。次に、変数 $marks は空の文字列です。空の文字列は偽の値です。

2 番目のオペランドはヌル値ではないため、評価されません。空の文字列が評価されるため、出力セクションに空白があります。

$age 変数の場合も同じです。これは、偽の値を保持しているが null 値を保持していないためです。最後に、$address 変数の値は null です。したがって、2 番目のオペランドアドレスなしが評価されます。

上記の例と説明から、Elvis 演算子と null 合体演算子の大きな違いは、Elvis 演算子が値が真であるかどうかをチェックすることであると結論付けることができます。それでも、null 合体演算子は値が null でないかどうかをチェックします。

著者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

関連記事 - PHP Operator