ホームページ制作 オフィスオバタ

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

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

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

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

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

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

今回エラーの出たソース

<?php
$in_buff = "ABCDEFG";
$out_buff = str_replace("ABC", null, $in_buff);

?>

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

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

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

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

ググって調べました。

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

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

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

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

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

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

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

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

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

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

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

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

モバイルバージョンを終了