Model :: find($ id)でモデルを読み込んでいて、IDが見つからない場合、nullを返します。
これを連鎖させようとする場合を除いて、これは問題ありません。
Model::find($id)->loadAttributes();
Nullのメソッドではないため、属性のロードは失敗します。
単純なソリューションはそれを2行に分割し、loadAttributesを呼び出す前またはtry/catchを実行する前にnullかどうかを確認しますが、考えていない別のソリューションがあるかどうか知りたいです。
メソッドチェーンを実行できない場合は、メソッドチェーンを実行しないでください。
_$model = Model::find($id);
if ($model === null) {
... // handle error
}
$model->loadAttributes();
_
これはおそらく、エラーを起こしにくい方法です。通常の操作でヌルケースが予想される場合は、例外システムを使用してこれを処理しないでください。
PHP 7は、null結合演算子_??
_を追加しますが、null伝播メソッド呼び出し演算子は追加しません(C#の_?.
_など)。 このような演算子を使用する場合 の場合、$a?->b()
の呼び出しは$a === null ? $a->b() : null
と同じになる可能性があります。
時々見られるイディオムの1つは、条件内で変数を割り当てることです。
_if (($model = Model::find($id)) !== null) {
$model->loadAttributes();
} else {
... // handle error
}
_
このスタイルは、割り当てられた変数のスコープを条件付きに制限し、エラー処理がない場合、戻り値がnullの場合、何もする必要がない他の言語ではより意味があります。