コンテンツにスキップ

PHP/Null安全性

出典: フリー教科書『ウィキブックス(Wikibooks)』
< PHP

PHPのNull安全性は、コードがnull値を安全に扱うための機能や技法を指します。nullは、変数が値を持たないことを示す特殊な値です。PHPでは、nullを操作する際に、意図しないエラーを防ぐために、いくつかの機能やパターンがサポートされています。

以下は、PHPでのNull安全性を確保するための主要な方法です。

Null合体演算子(??)

[編集]

PHP 7以降では、null値を簡潔にチェックできるNull合体演算子 (??) が導入されています。これは、変数がnullかどうかを判定し、nullであればデフォルト値を返します。

$value = $input ?? 'default value';

この例では、$inputが存在しないかnullの場合、'default value'が返されます。$inputが存在し、かつnullでない場合はその値が返されます。

Null安全呼び出し演算子(?->)

[編集]

PHP 8以降では、Null安全呼び出し演算子 (?->) が導入されました。これは、オブジェクトのプロパティやメソッドを呼び出す際に、そのオブジェクトがnullであった場合に自動的にnullを返します。

$result = $object?->method();

この例では、$objectnullの場合、エラーを引き起こさず、単にnullが返されます。もし$objectnullでない場合、そのメソッドが通常通り呼び出されます。

型宣言の厳密化

[編集]

PHP 7以降では、関数やメソッドの引数や戻り値に型を宣言することが可能です。これにより、nullが予期せず渡されるのを防ぐことができます。また、?を使ってnull許容型も定義できます。

function foo(?string $name): ?string {
    return $name;
}

この例では、$name引数と戻り値にnullを許容しています。nullを扱うことが許されない場合は、単に型を宣言するだけで、安全性を高めることができます。

isset()およびempty()の活用

[編集]

PHPの組み込み関数であるisset()empty()は、変数がnullかどうかをチェックするための基本的なツールです。

  • isset($var) は変数がセットされており、かつnullでないことを確認します。
  • empty($var) は変数がnull、空文字、0、空配列など"空"であることを確認します。
if (isset($var)) {
    // $var is not null
}

nullの明示的なチェック

[編集]

必要に応じてnullを明示的にチェックし、処理を適切に分岐させることもできます。

if ($var === null) {
    // Handle null case
}

エラー抑制演算子(@)の非推奨

[編集]

エラー抑制演算子@を使うことでnull関連のエラーを抑制することができますが、推奨されません。@は他の潜在的なエラーも隠してしまうため、代わりに上記の方法でnullを安全に処理することが重要です。