はじめに
PHP8技術者認定試験の問題集を解いていると、error_reporting()
に関する設問で「一見正しいように見える説明」が誤りで、正解になるケースがあります。本記事では、error_reporting()
の仕組みと試験で間違いやすいポイントを整理します。
目次
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()
の動作と試験での落とし穴を押さえられます。