「Passing null to parameter ... is deprecated」の意味と直し方(PHP 8.1)
PHP 8.1 以降で出る「Passing null to parameter」の警告の意味と、プログラムの直し方をまとめた。
PHP 8.1 に上げると「Deprecated: ... Passing null to parameter #1 ($string) of type string is deprecated」という警告が大量に出ることがある。意味と直し方をまとめた。
この記事の要点
- PHP の内部関数に null を渡したときの「非推奨」の警告
- 今は動くが、将来の版ではエラーになる予定
- 直し方は、null のときに空の文字列などを渡すようにすること
- 本番の画面には出さず、ログで洗い出す
何が起きているか
strlen()・trim()・htmlspecialchars()・str_replace()など、文字列を受け取る関数に null を渡している- PHP 8.0 までは黙って空の文字列として扱われていた
- PHP 8.1 から非推奨になり、警告が出るようになった
直し方
| 書き方 | 例 |
|---|---|
| null なら空の文字列にする | trim($value ?? '') |
| 先に null かどうかを確かめる | if ($value !== null) { ... } |
| 型を決めて受け取る | 関数の引数に型を書き、null を入れないようにする |
WordPress の場合
- 警告はプラグインやテーマの中から出ていることが多い
- 自分で直すより、プラグインやテーマの更新を待つほうが安全
- 更新されていないものは、代わりを探す
警告を隠すだけでは解決しない
本番では display_errors をオフにして画面に出さないのが基本。ただし隠しても書き方は直っていない。ログで洗い出して直しておかないと、将来の版でエラーになる。
8.0 から 8.1 でほかに変わったこと
- 内部関数に null を渡すと非推奨の警告(
strlen(null)など) htmlspecialchars()などの既定がENT_QUOTES | ENT_SUBSTITUTEに- MySQLi が既定でエラー時に例外を投げる
- PDO(MySQL・SQLite)が数値を文字列でなく int / float で返す
- 必須の引数より前にある、既定値つきの引数は必須扱い
よくある質問
この警告が出たらサイトは止まる?
止まらない。非推奨の警告なので今は動く。ただし将来の版ではエラーになる予定なので、早めに直す。
警告を消すだけではだめ?
画面に出さないのは正しいが、書き方は直っていない。ログで洗い出して直す。
WordPress のプラグインから出ている
プラグインの更新を待つか、代わりのプラグインを探す。プラグインの中身を自分で書き換えると、更新で元に戻る。
無料ツールPHP2Shell 脆弱性チェッカーPHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かります。参考にした情報
- php.net(2026年10月21日のセキュリティ告知)
- php.net:Supported Versions
- php.net:Unsupported Branches
- php.net:付録(移行ガイド)
- php.net:PHP 8.1 で推奨されなくなる機能
この記事の情報
2026年10月22日時点の公開情報にもとづく。最新は php.net と、利用中のサーバー会社の告知を確認すること。
PHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かる。移行の相談もできる。
無料で診断する