【公式】PHP8.0 nullsafe メソッドとプロパティ
https://www.php.net/manual/ja/language.oop5.basic.php#language.oop5.basic.nullsafe
PHP8.0に、nullsafe演算子が登場しました
これは画期的に便利です
ただ、全部に ?->
をつけるのもいかがなものかと思います
システムのデータ設計は、一般的にはデータベースで表され、必須項目や任意項目があります
必須項目の場合は、データが無いとシステムが成立しません
例えば、会員制ブログシステムで、会員とブログとコメントのER図を見てみましょう
erDiagram
users ||--o{ posts : "1人のユーザーは0以上の投稿を持つ"
users ||--o{ comments: "1人のユーザーは0以上のコメントを持つ"
posts ||--o{ comments: "1つの投稿は0以上のコメントを持つ"
users {
bigint id PK
string name "ユーザー名"
timestamp created_at
timestamp deleted_at
}
posts {
bigint id PK
references user FK
string title "投稿タイトル"
text content "投稿内容"
timestamp created_at
timestamp deleted_at
}
comments {
bigint id PK
references post FK
references user FK
text content "コメント内容"
timestamp created_at
timestamp deleted_at
}

投稿タイトルとか、投稿内容とか、そういうデータが入っていなくても、格好悪いかもしれませんが、このシステムのデータ設計は成立します
しかし、PKやFKになっている項目は、無くてはいけません
そういうデータを扱うときに、 nullsafe 演算子を使ってもいいのでしょうか?
個人的には、post?->user->name
は無しにしたいです
レビューのときに nullsafe 演算子は使わないようにしようと伝えます
なぜならば、これが null のときにエラーが起きてほしいからです
もし上の処理を実行した際にエラーが起きなかったら、作成者不明のブログが1件できていることに、誰も気づかずにいるかもしれません(一般的にはデータベースの設定として not null にするとは思いますが、 nullable の可能性もあります)
ですから、「エラーが起きてほしい」と願うときもあるんなんだなーと思ってくれたら嬉しいです