5

私はPHPを初めて使用し、@ mysql_ping()のような@プレフィックスを持つ関数を呼び出すいくつかの例を見て混乱しています。

それはなんのためですか?@は破棄され、「エイリアス」は十分なキーワードではないため、グーグル/検索はあまり役に立ちません。

4

7 に答える 7

15

@ は、エラー、警告、通知を抑制します。

エラーを適切に処理できるように、カスタムエラー ハンドラーまたは $php_errormsg 変数の適切なチェックでそれを補完する場合、適切な目的のために使用できます。

私の経験では、この適切な使用法はあまり見られず、代わりに、エラーに対処せずにエラーを隠すためだけに、悪い方法で多く使用されています。

詳細については、http: //www.php.net/manual/en/language.operators.errorcontrol.php をご覧ください。

于 2008-09-26T07:36:29.083 に答える
3

エラーメッセージの出力を抑制します。ここにある別のコメンテーターとは異なり、これを使用することはプログラミングの良い習慣だと思います(特に、出力が出力ページのhtmlに混在するWebアプリを開発している場合)。

mysql_connectのような関数は、リソース識別子を返します。エラーの場合はFALSEを返します。@mysql_connect(...)を使用して、戻り値を確認してください。

于 2008-09-26T07:37:43.697 に答える
2

「php at symbol」のグーグル検索は、呼び出しが原因で発生するエラーメッセージを表示しないように PHP に要求することを示唆しています。

于 2008-09-26T07:36:09.973 に答える
1

それ以外の場合に出力される可能性のあるエラーを抑制します。

エラーが発生すると必然的に困難につながるため、これは苦痛と困難のレシピです。原因を突き止めるのに何時間も費やす必要があります。@演算子が使用されていなかった場合、エラーは数秒で検出されます。

これを使用する正当な理由はありません。display_errorsおよびerror_logini設定を使用して、ライブサイトにエラーが表示されないようにし、開発サイトに表示させます。

見たくないエラーがある場合は、抑制するよりも修正する方がよいでしょう。

外部ライブラリにあり、制御できないものである場合は、ログに書き込んで、本番環境でdisplay_errorsをオフにして、そのまま使用してください。あなたが今抑制しているエラーが喜んで生きているかどうかわからないので、常にそこからスローされるエラーになります。

@===悪い

于 2008-09-26T07:42:28.130 に答える
0

関数の前に記号を付けると、エラーが発生した場合にPHPエラーハンドラーがトリガーされなくなります。使用する場合は、すべてのエラー処理を自分で行う必要があることに注意してください。

$test = @file_get_contents('nonexistant.file');
if(!$test)
{
    die('Failed');
}

より良い方法は、display_errorsカスタムエラーハンドラをオフにして使用することです(エラー例外を参照)。

于 2008-09-26T07:42:23.793 に答える
0

エラーメッセージを抑制します:http: //bytes.com/forum/thread10951.html

于 2008-09-26T07:37:15.087 に答える
0

特に、管理者がphp環境で遊んでほしくない場合や、値が重要ではなく、主に表面的なものである場合に便利です。ただし、覚えておいてください。これは回避策であり、万能薬ではありません。

[...]

.$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */

$f["date"] = $foutDate;

$f["fullDate"] = date("r", $foutDate);

[...]

于 2010-05-06T04:05:42.037 に答える