nullsafe演算子を使ってるのにレビューで指摘されるポイント

  • URLをコピーしました!

【公式】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 の可能性もあります)

ですから、「エラーが起きてほしい」と願うときもあるんなんだなーと思ってくれたら嬉しいです

ツチノコテクノロジーに開発・保守を発注しませんか?

Laravel・Flutterの開発・保守をツチノコテクノロジーに発注しませんか?

まずはZOOMで打ち合わせ

お申し込みはこちら

ツチノコテクノロジーでは一緒に働く仲間を募集しています!

完全リモートで働きたい方へ!

詳しくは以下をご覧ください。

ツチノコテクノロジー採用サイト

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

yfukudaのアバター yfukuda 取締役・システムエンジニア

ツチノコテックアカデミアの記事は、社内で誰かが質問してくれたことに回答したときに、ついでに記載しています!(^^)/
みんなの悩みを共有すれば、きっと誰かの役に立つと信じて更新しています!

目次