注:最初に、PHP開発者の99%がエラー抑制演算子を使用していることを認識しています(私は以前はその1つでした)。したがって、これを見るPHP開発者は同意しないと予想しています。
あなたの意見では、エラーを処理している可能性があるのに、@演算子を使用してPHPのエラー/警告を抑制することは有効ですか?
簡単な答え:
いいえ!
もっと長く正解:
すべてを知っているわけではないのでわかりませんが、これまでのところ、それが良い解決策であるという状況に遭遇したことはありません。
なぜ悪いのか:
PHPを使用して約7年になると、エラー抑制演算子によって引き起こされるデバッグの苦痛が際限なく見られ、避けられない状況に遭遇したことはありません。
問題は、エラーを抑制しているコードの一部が、現在表示されているエラーのみを引き起こす可能性があることです。ただし、抑制された行が依存するコード、またはそれが実行される環境を変更すると、その行が無視しようとしていたものとはまったく異なるエラーを出力しようとする可能性があります。次に、出力されていないエラーをどのように追跡しますか?地獄のデバッグへようこそ!
エラーが抑制されたために、2、3か月ごとにどれだけの時間を浪費していたかを理解するのに何年もかかりました。ほとんどの場合(ただし排他的ではありません)、これは開発者環境でエラーのないサードパーティのスクリプト/アプリ/ライブラリをインストールした後ですが、phpまたはサーバーの構成の違い、または通常はすぐにエラーを出力する依存関係の欠落のために私のものではありません問題が何であったかを警告しますが、開発者が魔法の@を追加したときは警告しません。
代替案(状況と望ましい結果に応じて):
認識している実際のエラーを処理して、コードの一部が特定のエラーを引き起こす場合、その特定の状況で実行されないようにします。しかし、あなたはこの部分を理解していると思います。エンドユーザーにエラーが表示されるのではないかと心配していました。これについては、これから説明します。
通常のエラーの場合は、ページを表示しているときに希望どおりに出力されるようにエラーハンドラーを設定できますが、エンドユーザーには表示されず、ログに記録されるため、ユーザーがトリガーしているエラーを把握できます。
php.iniで致命的なエラーdisplay_errors
がオフに設定されている場合(エラーハンドラーは引き続きトリガーされます)、エラーログを有効にします。開発サーバーとライブサーバー(推奨)がある場合は、開発サーバーでこの手順を実行する必要がないため、エラーログファイルを確認しなくても、これらの致命的なエラーをデバッグできます。シャットダウン機能を使用して大量の致命的なエラーをエラーハンドラに送信するトリックもあります。
要約:
それを避けてください。それには十分な理由があるかもしれませんが、まだ見たことがないので、その日まで、(@)エラー抑制演算子は悪だと思います。
詳細が必要な場合は、PHPマニュアルのエラー制御演算子ページで私のコメントを読むことができます。