《PHP8上級試験対策》error_reporting() の仕組みと「間違った説明」が正解になるワナ

  • URLをコピーしました!

はじめに

PHP8技術者認定試験の問題集を解いていると、error_reporting() に関する設問で「一見正しいように見える説明」が誤りで、正解になるケースがあります。本記事では、error_reporting() の仕組みと試験で間違いやすいポイントを整理します。

キーワード:PHP8技術者上級認定試験/error_reporting/PHPエラー制御/-1と0の違い/ビット演算/

目次

error_reporting() の基本

PHP の error_reporting() は、どの種類のエラーを出力するかを制御する関数です。

error_reporting(?int $error_level = null): int
  • $error_level には 数値 または 定数(E_WARNING, E_NOTICE など) を指定
  • 定数は「ビットフラグ」であり、| 演算子で組み合わせ可能
  • 戻り値は「変更前のエラーレベル」

特殊な指定値

error_reporting(-1)
→ すべてのビットが 1
あらゆるエラーを出力

error_reporting(0)
→ すべてのビットが 0
一切エラーを出力しない

実際のコード挙動

次のコードを例に考えてみます。

declare(strict_types=1); 
error_reporting(-1);   // ① 全てのエラーを出力

var_dump($arr['no key']);  // ② 未定義配列アクセス → Warning 発生

$r = error_reporting(0);   // ③ エラー非表示に変更
var_dump($r);              // ④ 直前の値(-1)が返る

var_dump($arr['no key']);  // ⑤ エラーは出ない(NULLだけ出力)

実行結果

実際の出力は以下の通りです。

Warning: Undefined variable $arr in ...
Warning: Trying to access array offset on value of type null in ...
NULL
int(-1)
NULL

ポイント:

  • ② の時点では -1 → 警告が出る
  • ④ の戻り値 → int(-1)
  • ⑤ の時点では 0 → 警告は出ず NULLのみ

問題集の「ワナ」

問題集では、⑤ の出力について 「Warning が表示される」と説明しているケース があります。
これは 誤り であり、実際には 警告は出ず NULL だけ が表示されます。

つまり、試験問題で「この説明は正しいか?」と問われた場合、「誤り(だから正解)」 になるのです。

まとめ

  • error_reporting() は「どのエラーを表示するか」を制御する関数
  • -1 = 全エラー表示、0 = 全エラー非表示
  • 戻り値は「変更前のエラーレベル」
  • 実際の動作をコードで追うと理解しやすい
  • 試験では 「⑤の時点でも Warning が出る」 という説明が出てきたら要注意!

✅ この記事を読めば、error_reporting() の動作と試験での落とし穴を押さえられます。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次