PHP7.4 → PHP8.x へのバージョンアップ後、サーバーの error.log に見たことのないWarningやFatal Errorが大量に出るようになった──という経験をした方も多いと思います。
PHP8での最大の変化は、「これまで見て見ぬふりをしていたものを、きちんとエラーにするようになった」という点です。PHP7.xでは「ちょっとおかしいけど動く」コードが、PHP8.xでは「おかしいのできちんと止める」になりました。
この記事では、「まず何を確認して、どう対処するか」の流れを説明します。
なぜPHP8にするとエラーが増えるのか
① 未定義の変数・配列キーが Notice → Warning に格上げ
PHP7.xまでは「未定義の変数を使った」「存在しない配列のキーにアクセスした」という操作は Notice(通知)でした。画面には何も出ず、ログにもさほど残らないケースが多かったです。
PHP8.0以降はこれが Warning(警告)に格上げされ、エラーログにきっちり記録されるようになりました。
② bool 型へのインクリメントが非推奨に
get_post_meta() など、失敗時に false を返す関数の戻り値に対して $value++ をすると、PHP8.3以降で Deprecated: Increment on type bool という警告が出ます。PHP7.xでは何も言われなかったコードです。
③ 型チェックが厳密になり、場合によってFatal Errorに
PHP7.xでは「文字列を渡すべき関数に配列を渡しても暗黙的に変換して動く」ケースがありました。PHP8.xではこれが Fatal Error(プログラムが停止するエラー)になることがあります。
エラーログの読み方
error.logの各行は次のような形式になっています。
[17-Mar-2026 12:34:56 UTC] PHP Warning: Undefined array key "post" in /home/user/public_html/wp-content/themes/mytheme/functions.php on line 976
| 項目 | 内容 |
|---|---|
PHP Warning |
エラーの種別(Warning / Fatal error / Deprecated など) |
Undefined array key "post" |
エラーの内容 |
functions.php on line 976 |
ファイル名と行番号 |
まずエラーの種別を確認します。
- Fatal error → プログラムが停止。最優先で対処
- Warning → 動いているが問題あり。順次対処
- Deprecated → 将来のバージョンで削除予定。対処推奨
- Notice → 軽微な問題。余裕があれば対処
よく発生するエラーと対処法
① よく出るWarning
$post->post_nameon nullget_post_meta()の戻り値に++をしたときの bool incrementforeach()に null を渡したときのWarning$_GET['post']など存在しない配列キーへのアクセスif-elseif-elseの全分岐で変数が定義されていない問題
PHP8移行でWordPressテーマに出るWarning 5パターンと修正コード【実例付き】
② Fatal Errorとエラーの連鎖
get_page_by_path()に配列を渡してFatal Error(PHP8の型厳格化)- ファイルのinclude失敗がsession_startエラーを引き起こす連鎖構造
- テーマ複製時に起きやすい「更新漏れ」チェックリスト
WordPressテーマのFatal Errorとエラーの連鎖構造を直す【PHP7→PHP8移行】

