PHP8.1から発生するPassing null to parameter に対処

PHPは定期的にバージョンがあがります。
その際に、今までOKな記述がNGとなるものがあります。

今回も、テスト環境をphp8.1にしてみたところ、案の定エラーが出るようになりました。

色々調べて対処いたしましたので、忘備録として記録いたします。

現象はこのような感じです

以下のようなエラーが出るようになりました。

今回エラーの出たソース

str_replace()関数を呼び出した時に、NULL指定がエラーとなりました。

原因はphp8.1バージョンアップによる仕様変更

とはいえどうすればいいの?

NULLを引数に指定したらエラーになりますと言われても、処理上空白にすることは多々あります。
NULLが指定できないならば、どうすればいいのでしょう?

ググって調べました。

NULLの代わりに「空白」を指定すればエラーがでなくなります。

NULLを””(空白)に置き換えたらエラーが出なくなりました。
記述を変えるだけで済んだので、修正も少なくてすみました。

疑問:NULLと空白は何が違うの?

いままでNULLと空白はほぼ同義語だと思っていました。
事実、if文等でもさほど処理に違いは見られませんでした。
実際に画面に表示してみるとどちらも空白には違いありません。

では何が違うのでしょうか?

調べたら以下のようなことでした。

  • 空白は「空白」という文字がセットされている
  • NULLはそもそも何もセットしていない

なんだかわかるようなわからないような。
さらに調べてみると、次のようなことがわかりました。

NULLはインスタンス化されていないため引数の値としては不適切
ということでした。

インスタンス化とは実体化のことです。
身近な例としては、クラスを使用する際には、$sample = new sample(); というような実体化宣言をしないと使えません。

PHPもオブジェクト指向のため、実体化したものしか使えません。
NULLは実体化していないものであるため、今までは何となくOKにしていたけど、これからはNGにするというようなことでした。

では、NULLは何のために使うの?
となりますが、私の解釈としては変数の中身をリセットするということです。
変数は一度NULLでリセットしてから、数字、アルファベット、空白などをセットするということのようです。

いままで初期値としてNULLを指定していた部分は、空白またはゼロをセットすることになりそうです。

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております