PHP8.1から発生するPassing null to parameter に対処
PHPは定期的にバージョンがあがります。
その際に、今までOKな記述がNGとなるものがあります。
今回も、テスト環境をphp8.1にしてみたところ、案の定エラーが出るようになりました。
色々調べて対処いたしましたので、忘備録として記録いたします。
現象はこのような感じです
以下のようなエラーが出るようになりました。
今回エラーの出たソース
1 2 3 4 5 6 |
<?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はそもそも何もセットしていない
なんだかわかるようなわからないような。
さらに調べてみると、次のようなことがわかりました。
NULLはインスタンス化されていないため引数の値としては不適切
ということでした。
インスタンス化とは実体化のことです。
身近な例としては、クラスを使用する際には、$sample = new sample(); というような実体化宣言をしないと使えません。
PHPもオブジェクト指向のため、実体化したものしか使えません。
NULLは実体化していないものであるため、今までは何となくOKにしていたけど、これからはNGにするというようなことでした。
では、NULLは何のために使うの?
となりますが、私の解釈としては変数の中身をリセットするということです。
変数は一度NULLでリセットしてから、数字、アルファベット、空白などをセットするということのようです。
いままで初期値としてNULLを指定していた部分は、空白またはゼロをセットすることになりそうです。