エラー制御演算子
そふぃのPHP入門 >> PHP言語リファレンス >> PHPの演算子 >> エラー制御演算子

エラー制御演算子

エラー制御演算子とは

エラー制御演算子とはアット「@」で表され、エラーの出力を制御する事のできる演算子です。PHPの式の前につけるとその式で発生したエラーは無視され出力されません。

PHPでは親切にエラーメッセージを出力してくれますが、この出力が逆に邪魔になる時があります。そのような時に@演算子でエラーの制御をすると便利です。

主にはファイルやデータベースが開けなかった場合にエラーが出てしまうのを回避するためにファイル操作やデータベース接続などで使われているようです。

存在しないファイルを開こうとするとWarningエラーが発生しますが、エラー制御演算子「@」を使えばエラーは出力されません。

  1. @fopen("存在しないファイル");

未定義の変数を呼び出すとこれまたNoticeエラーという普通では出力されないエラーがPHP内部で発生することになりますが、これもエラー制御演算子「@」で回避できます。

  1. @$undefined; // 未定義の変数

Noticeエラーはデフォルトの設定では出力されないため、意識する事は少ないかもしれませんがPHP内部ではエラーが発生しているので一応覚えておいて下さい。

ただし、エラー制御演算子「@」でパースエラー(文法ミス)によるエラーメッセージは制御する事ができません。

PHPのエラー文

PHPで出力されるエラーはエラー定数として定義されています。PHPですでに定義されている定義済み定数ってやつです。

参考 PHPでの定義済み定数1:エラー定数

PHPのエラーには、文法ミスなどの致命的なエラーから未定義の変数などを呼び出した時の軽いエラーまであります。よく見るエラーは以下のようなものです。

エラー 定数名
Parseエラー E_PARSE
Warningエラー E_WARNING
Noticeエラー E_NOTICE

このうち文法ミスってのがParseエラーとして出力されスクリプトの実行すら止まってしまいます。これだけは上でも触れたとおりエラー制御演算子「@」でも回避できません。行末にセミコロン「;」を付け忘れたとか、文字列をクォートしなかったなどの場合に発生します。

Waringエラーはエラー文が出力されますが、スクリプトの実行は止まりません。スクリプト実行に何か問題があり、その部分の実行ができない場合などに出力されます。存在しない配列やファイルを操作しようとすると発生します。

Noticeエラーは軽い警告でスクリプトの実行には問題ないけど、やめといた方がいいよってくらいのエラーです。エラー文も出力されませんし、スクリプトの実行も止まりません。よーするに見た目は何も変わりませんww。PHP内部でエラーが出ているだけなので気にしなくていいかもしれませんが、デバック時にはこのエラーが役立つことも多々あります。未定義の変数を使用した場合などに発生します。

PHPではエラー報告レベルというものが設定されていて、これで出力されるエラーの種類が決められています。今までの説明でエラーが出力されるかどうかというのはすべてデフォルトの設定の場合です。この設定を変更するとNoticeエラーを見る事ができるようになりますが、その場合にはerror_reporting()関数を使います。この関数はエラー報告レベルを変更する事ができるので、デフォルトでは出力されないエラーを出力することができます。

参考関数

書式

  • int error_reporting( [ int level ] )

PHPのエラー報告レベルのデフォルト値は2039(E_ALL~E_NOTICE)となっています。この設定ではNoticeエラーを含まないのでNoticeエラーを出力する際には

  1. error_reporting(E_NOTICE); // 定数名で指定
  2. error_reporting(8); // ビット値で指定
  3. error_reporting(E_ALL); // すべてのエラーを出力

などのようにします。