2011-01-19 10 views
0

"この行に複数の注釈が見つかりました"PHPコード、それは遅く、間違っていますか?

私は以前にaptanaなどのIDEを使用していましたが、このエラーは一度も出ませんでしたが、昨日私はzend studioをインストールしました。同時に条件をチェックする。すべての

code: 
line 16: if ($message_array = @unserialize($e->getMessage())) 
line 17: $message = $message_array; 

状態であれば、私は変数に値を割り当てられ、変数がある場合もチェック真/偽、それは私にエラーを与える「この行で見られる複数の注釈」

+6

@でのエラーを抑止するのは常に悪いです! – Shoe

答えて

9

ええ、その文法は通常、「偶発的な割り当て」として最も適切なIDEによってフラグされます(=または==を意味するかどうかは不明です)。

if (($message_array = @unserialize($e->getMessage()))) { 
} 
また

、可読性と保守性のために、私はそこにいくつかのことを示唆している:大半は、(それはあなたが結果ではなく、テストをしたい見かけますので)エラーを黙らせる()でそれをラップすることができます。

まず、中括弧を使用します。それはあなたがそれらを使用できないようにする特別なケースだから、私は個人的にいつもそれらを使うより良い形だと思って、何が意味されたのかがはっきりしていると思う。

第2に、if節の外のすべてのアジンメントを実行します。それはあなたが意味していたことを一目でわかりやすく明快に伝えます。それはあまりうまく見えません。

$message_array = @unserialize($e->getMessage()); 
if ($message_array) { 
    ... 
} 

第3に、@演算子を避けることをお勧めします。私にはコードロットの兆候です。エラーを適切に処理するよりも使いやすく簡単なことはわかっていますが、それは単なる人生をより困難にするショートカットだと思います。あなたはいくつかの方法でそれを避けることができます。まず、文字列を確認してからunserializeに渡すことができます。それが空でないこと、文字列などであることを確認してください。次に、error handlerをインストールして、PHPエラー(例外)に例外をスローします。そうすれば、unserializeコールはtry {} catch(){}ブロックにラップされます。スローされたエラーがあなたが思っているものだと信じるのではなく、実際にエラーを調べることができるので、それはより良いです...

3

されていないこと実際のエラーです。代わりに、IDEは複数のエラー、警告またはヒントを同じコード行で検出しました。

[問題]タブで実際のエラーと警告を確認できます。

+0

ページにエラーはありませんが、プログラミング賢いと尋ねていましたが、そのようにすることはお勧めしていませんか? – Basit

関連する問題