PHP 8のNullsafe演算子(?->)とは?基本構文と使い方を実例付きで解説
PHP 8では、従来のようなnullチェックの条件分岐の代わりに、「Nullsafe演算子(?->)」を使用できるようになりました。Nullsafe演算子を使うことで、メソッドやプロパティへのアクセスを連鎖的(チェーン)に記述できます。評価の過程でチェーン内のいずれかの要素がnullになった場合、その時点でチェーン全体の実行が中断され、式全体はnullと評価されます。
演算子の左側がnullと評価された場合、チェーン全体の実行はそこで停止し、結果はnullになります。一方、左側がnullでなければ、通常のオブジェクトアクセス演算子(->)とまったく同じように動作します。
また、Nullsafe演算子は複数つなげて記述することも可能です。その場合、最初にnullに到達したNullsafe演算子の時点で短絡評価(ショートサーキット)が行われるため、それ以降の処理は実行されません。
$employee->getDepartment()?->getAddress()->format();
Nullsafe演算子の構文は、メソッド・プロパティアクセス演算子(->)とよく似ています。null安全なアクセスを行いたい場所では「?->」を使用します。
構文:PHP 8 Nullsafe演算子
$foo?->bar?->baz;
PHP 7以前との比較:nullチェックのコード
PHP 7以前では、ネストしたオブジェクトに安全にアクセスするために、以下のようにif文によるnullチェックを重ねる必要がありました。
$address = null;
if ($emp !== null) {
$department = $emp->getDepartment();
if ($department !== null) {
$address = $department->getAddress();
}
}PHP 8のNullsafe演算子を使えば、同じ処理をわずか1行で簡潔に書くことができます。
$address = $emp?->getDepartment()?->getAddress();
使用例:PHP 8 Nullsafe演算子(?->)
<?php
class Emp{
public function getAddress() {}
}
$emp = new Emp();
$dept = $emp?->getAddress()?->dept?->iso_code;
print_r($dept);
?>出力
null
このように、Nullsafe演算子を活用することで、nullチェックのための冗長な条件分岐を排除し、可読性の高いコードを書けるようになります。特に、APIレスポンスや深くネストしたオブジェクト構造を扱う際に威力を発揮します。
-
PHPのダブル否定(!!)演算子とは?仕組みと使い方を実例で解説
PHPにおけるダブル否定(!!)演算子は、論理否定(NOT)演算子「!」を2回連続して適用する書き方です。1つ目の「!」が値を否定(真偽値への変換と反転)し、2つ目の「!」がその結果を再度反転します。その結果、元の値はブール型(true / false)に明示的にキャストされることになります。このテクニックは、任意の値を「真か偽か」という観点だけで評価したい場合に便利です。たとえば、文字列や数値が「空かどうか」「0かどうか」を判定し、結果を true または false のみで扱いたい場面などで活用されます。基本的な動作の仕組みPHPでは、次のような値は偽(false)と評価されます。ブール値
-
PHPの&&演算子とAND演算子の違いとは?優先順位による挙動の差を徹底解説
PHPには、算術演算、代入、比較など、さまざまな処理を行うための多彩な演算子が用意されています。本記事では、論理演算子「&&」と「AND」に焦点を当て、それぞれの優先順位がもたらす挙動の違いを中心に詳しく解説します。これらの論理演算子は結果として真(true)か偽(false)を返すため、「ブール演算子」と呼ばれることもあります。 「AND」演算子とは 「AND」演算子は、両方の条件がtrueである場合にのみtrueを返す演算子です。まずは基本的な動作を、以下の例で確認してみましょう。 サンプルコード1 <?php $val1 = 20; $val2 = 50; i