2011-01-19 2 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()))) { 
} 

Кроме того, для удобства чтения и ремонтопригодности, я хотел бы предложить несколько вещей там ,

Во-первых, используйте брекеты. Поскольку это только особый случай, который позволяет вам не использовать их, я лично считаю, что лучше использовать их всегда, чтобы было ясно, что подразумевалось.

Во-вторых, сделайте все назначения за пределами статьи if. Это делает его более ясным и легче сказать, быстро взглянув на то, что вы имели в виду. Плюс это выглядит менее загроможденным.

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

В-третьих, я предлагаю избегать оператора @. Для меня это признак кодовой гнили. Хотя я знаю, что он прост в использовании и проще, чем правильно обрабатывать ошибку, я думаю, что это просто короткий путь, который сделает жизнь сложнее для вас. Вы можете избежать этого несколькими способами. Сначала вы можете проверить строку перед тем, как передать ее unserialize. Убедитесь, что он не пуст, строка и т. Д. Во-вторых, вы можете установить error handler для исключения исключений из ошибок PHP (что я делаю). Таким образом, вы просто заверните вызов unserialize в блок try {} catch(){}. Это лучше, так как вы действительно можете проверить ошибку, а не просто полагаться на то, что заброшенная ошибка - это то, что вы думаете ...

3

Это не фактическая ошибка. Вместо этого среда IDE обнаружила более одной ошибки, предупреждений или намеков на одну и ту же строку кода.

Вы можете посмотреть вкладку «Проблемы», чтобы увидеть фактические ошибки и предупреждения.

+0

на странице нет ошибки, но я спрашивал как программирование мудрым, не рекомендуется ли так поступать? – Basit

Смежные вопросы