関数呼び出し前の@文字


135

PHPでのこれら2つの関数呼び出しの違いは何ですか?

init_get($somevariable);

@init_get($somevariable);

「@」は、phpのエラーと通知を閉じます
ErkanÖzkök

回答:


210

「@」は、関数で発生する可能性のあるすべてのphpエラーを抑制します。


しかし@、PHPのtrigger_error関数の前に置くとどうなるでしょうか。私はいくつかのコードでそれを見ましたが、その振る舞いは今のところ私には一貫していません。場合によっては、構成されたエラーハンドラーによってエラーが報告されているのがわかります。
fritzmg 2016年

2
@一時的に設定されますerror_reporting0ではなく、「抑止」のエラーではないでしょう。
solidgumby 2016年


36

すでに回答した@ように、はエラー(ある場合)の表示を停止します。
パフォーマンスの観点から、これはお勧めできません。

PHPが行っていることは次のとおりです。

  • エラー表示状態の読み取り
  • エラーを表示しないようにエラー表示を設定する
  • 関数を実行する
  • エラー表示を以前の状態に設定する

エラーが表示されたくない場合は、useを使用してくださいerror_reporting(0);

または、バグのないコードを書くだけです:P


ゼロを置くことをお
勧めし

1
たとえばメールなど、制御できない機能についてはどうですか?他にどのようなオプションがありますか?私は現在@を使用していますが、別の方法で実行できると
便利です


6

誰もが言ったように、それはその特定の関数のエラーの出力を停止します。ただし、エラー表示設定を2回変更する必要があるため、パフォーマンスが大幅に低下します。警告やエラーを無視せず、代わりにコードを修正することをお勧めします。


回答ありがとうございます。そのコードは私のものではありません、私は好奇心のためにphpBBコードだけを見ていたので、パフォーマンスの問題はありません。:) 再度、感謝します。
nixie
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.