Php/docs/language.operators.errorcontrol

提供:Dev Guides
< Php
移動先:案内検索

エラー制御演算子

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 コール、定数等の 前にこの演算子をつけることが可能です。関数またはクラスの定義や ifforeach 等のような 条件構造の前にこの演算子を付けることはできません。

警告 現在、エラー制御演算子プレフィックス"@"は、スクリプトの実行を 終了するような致命的なエラーの出力さえ抑圧します。このため、ある関数の エラー出力を抑制するために "@" を使用した場合、その関数が 利用できなかったり、ミスタイプがあった場合でも、原因を示すことなく その場所でスクリプトは終了してしまいます。