エラー制御演算子
PHP はエラー制御演算子(@)をサポートしています。PHP の式の前に付けた場合、 その式により生成されたエラーメッセージは無視されます。
set_error_handler() で自作のエラーハンドラを設定した場合は エラー制御演算子があってもそのエラーハンドラがコールされます。 しかし、自作のエラーハンドラの中で error_reporting() をコールすれば、@ つきの式で生成されたエラーの場合は返り値が 0 になるのでこの値で区別することができます。 自作のエラーハンドラの中ではこの方法による区別を行うべきです。
式によって生成されたあらゆるエラーメッセージは
error_get_last() 関数が返す配列要素
"message"
から取得できます。
この関数の結果はエラーごとに変わります。よって速やかに確認する必要があります。
<?php/* 意図的なエラー */$my_file = @file ('non_existent_file') or die ("Failed opening file: error was '" . error_get_last()['message'] . "'");// この演算子は関数だけでなく、全ての式で動作します。$value = @$cache[$key]; // インデックス $key が存在しない場合でも、警告を発生しません。?>
注意:
@演算子は、式 でのみ動作します。基本的なルールは次のようになります。 値を得ることができるものの場合、@ 演算子を前に付けることが可能です。 例えば、変数、関数、include コール、定数等の 前にこの演算子をつけることが可能です。関数またはクラスの定義や
if
や foreach 等のような 条件構造の前にこの演算子を付けることはできません。
警告 現在、エラー制御演算子プレフィックス"@"は、スクリプトの実行を 終了するような致命的なエラーの出力さえ抑圧します。このため、ある関数の エラー出力を抑制するために "@" を使用した場合、その関数が 利用できなかったり、ミスタイプがあった場合でも、原因を示すことなく その場所でスクリプトは終了してしまいます。