null合体演算子/null安全演算子

null 合体演算子 (??) がシンタックスシュガーとして追加されました。 コードをシンプルに記述することができます。 この演算子は、左辺がnullでなければその値、左辺がnullなら右辺の値、両方nullならnull

// null合体演算子 ??

$var = 20;
echo $var ?? 10;
// 20

$var = null;
echo $var ?? 10;
// 10

//isset = nullかどうか判定
echo isset($var) ? $var : 10;

//Null合体代入演算子 変数がnullの時に代入する
$var ??= 10;

省略構文

$message = 'こんにちは';
print $message ? $message : 'ノーコメント';

//省略 式1がtrueに変換できる時は式1、そうでない時は式2を返す
print $message ?: 'ノーコメント';
//代入する場合
$message = $message ?: 'ノーコメント';

オブジェクト変数のメンバー(変数/メソッド)へのアクセス時
8.0以降追加

// null安全演算子 ?->

$dt = null;
print $dt?->format('Y年m月d日 g:i:s');
// 何も表示されない($dtがnullでもエラーにならない)

$obj?->hoge()?->foo()?->bar();

// 代入、参照は不可 nullになる可能性があるため
$obj?->hoge = '...';  //nullに代入はできない
$result = &$obj?->hoge; //参照渡し

宇宙船演算子
$a が $b より大きい場合は 1、
$a と $b が等しい場合は 0、
$a が $b より小さい場合は -1
をそれぞれ返す
関連

// 整数値
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// 浮動小数点数値
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// 文字列
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1