2011-08-09 11 views
4

私はいくつかの変数を定義している場合と定義していない場合があります($isLoggedInブール値)、エラーメッセージを取り除こうとしています。私が代わりに最初の変数のexistance確認する必要がある場合PHPでエラーを抑制する場合

if (@$isLoggedIn) 

または::本番環境では

if (isset($isLoggedIn)and$isLoggedIn) 

をされて、私はエラー抑制演算子を使用してはならない何らかの理由があった場合、私は思っていましたいずれのアプローチにも欠点や利点がありますか?両方のステートメントの機能は同じで、このvarが未定義であるために問題はありません。しかし、エラーとして記録されるべきではありません。

+0

+1質問します。うまくいけば、他の人は答えから学ぶでしょう – adlawson

答えて

3

私の経験では、個々のレベルでエラーを抑止するべきではありません。運用環境では、エラー報告を0に設定し、エラーをオフに表示します。このような個々の苦痛を抱えているのは、6ヶ月後にエラーを修正するために戻ってくるときに足に自分を撃っていることです。そこにあることを忘れて、エラーが出ていないのに、

具体的には、$ isLoggedInをfalseに設定して、現在インスタンス化している場所でその値を上書きしてください(ここではコード構造を想定しています)。

3

変数を使用している場合は存在するはずです。あなたのコードはエラーを抑止すべきではありません。

+0

私はこれに-1があるのを見ました。なぜそれが大きなアドバイスなので、わからない。 – GolezTrol

+0

@goleztroll私は長い間、長い答えを今日投稿しているので誰かが私にダウン投票していると思う。 – Incognito

0

最もロジックの方法は、常にこれらの変数を宣言するだろう - $isLoggedInなどの特に重要なものを - と、それは本当であるかどうかを確認:

if ($isLoggedIn) 

かだけそれが本当であるならば、それを設定します。

if (isset($isLoggedIn) 

私の意見では、最初のオプションが優れていて、両方を混合するのは良い解決策ではありません。

1

コード内にエラーサプレッサーがたくさんあると、特に自分以外の人にはメンテナンスが困難になります。次の人は、彼が慣れていたのとは異なる方法でコードを見ることを学ばなければなりません。抑止はちょうどハックであり、デバッグ作業を遅くするハックがなぜ発生するのかを他の人が理解しようとします。

if(@ $ var)はif(!empty($ var))と同じ結果を生成するので、それをより意味的に正しい方法でチェックするので、代わりにその値を使用してください。

1

http://php.net/manual/en/language.operators.errorcontrol.php

あなたの変数は常に、少なくともこれをfalseに初期化して、一度ログインし、trueに設定し、存在している必要があります。抑制の面では、私は第2の方法に行くことをお勧めします。

警告現在、「@」のエラー制御演算子プレフィックスさえ無効にエラーがスクリプトの実行を終了するような致命的なエラーを報告します。とりわけ、「@」を使用して特定の関数からのエラーを抑制し、それが利用できないか、誤って入力された場合、スクリプトはその理由を示すことなくすぐに死ぬでしょう。

if(!empty($var)){} 

をしかし、あなたは常に一定になるように、まだ、あなたはあなたのコードを構造化する必要があります

+0

ありがとう、@が致命的なエラーを抑制するかどうかはわかりませんでした。私は変数を設定します...それは私のコードではないので、私は掘り下げてそのような小さな問題を修正したくありませんでしたが、それはリファクタリングの一部だと思います。 –

0

変数が設定されている場合、私は確かではないんだけど、それが本当であるならば、私が知りたい場合は、私が書きますあなたの変数について。 グローバル変数は使用しないでください。

0

私の考える最良の選択肢は、PHPの基本的な警告システムを使用するのではなく、可能な限り利用可能な例外処理を使用することです。警告を例外にも変換するので、すべて同じように処理できます。

特定のエラーを検出できます。特定のハンドラによって捕捉されないグローバルエラーは、一般的なハンドラによって捕捉される可能性があります。そうすれば、これらすべてのエラーをキャッチしてログに記録したり、開発部門(または自分自身)にメールすることができます。

これらのエラーは、特にSQLエラーや欠落している変数に関するメッセージが含まれている場合は、運用環境で表示しないでください。いくつかの一般的な内容と一般的で使いやすいエラーメッセージ(必要な場合)を表示し、技術的なものを隠したままにして、ページを正常に消滅させる。

しかし、デバッグを生きた地獄にするので、例外を無視したり隠すことはありません。

1

PHPが公開Webサイトのブラウザにエラーメッセージを書き込むことを決して許さないでください。しかし、set_error_handler()を使用していても、コード内でそれらを処理する必要がある場合は常に、それらをログに記録してください。

は、今、私たちは道の外にそれを持っている....

これは警告、エラーではありません。

はい警告メッセージはPITAになることがあります。しかし、厳格な変数チェックが好きな人もいます。抑制演算子を使用すると、すべてのE_STRICTメッセージを抑制するよりもターゲットを絞ったアプローチが得られます。したがって、宣言変数を使用できるようにするPHPのサポートが大好きですが、これが私の行いです(try {} catch() 。

したがって、どちらの方法でも適切ですが、抑止されていないときにこれらの警告をログに記録してください。修正する必要があります。

+0

私は生産上のエラーを出力させませんが、プロードサイトの関連するエラーのログが必要です。他の人が示唆しているように、私は変数をインスタンス化するつもりです。 –

関連する問題