Да, этот синтаксис обычно помечен большинством достойных IDE как «Случайное присвоение» (поскольку это не очевидно, если вы имели в виду =
или ==
). Большинство позволит вам обернуть его в ()
, чтобы отключить ошибку (с тех пор это очевидно, вы хотите результат, а не тест):
if (($message_array = @unserialize($e->getMessage()))) {
}
Кроме того, для удобства чтения и ремонтопригодности, я хотел бы предложить несколько вещей там ,
Во-первых, используйте брекеты. Поскольку это только особый случай, который позволяет вам не использовать их, я лично считаю, что лучше использовать их всегда, чтобы было ясно, что подразумевалось.
Во-вторых, сделайте все назначения за пределами статьи if
. Это делает его более ясным и легче сказать, быстро взглянув на то, что вы имели в виду. Плюс это выглядит менее загроможденным.
$message_array = @unserialize($e->getMessage());
if ($message_array) {
...
}
В-третьих, я предлагаю избегать оператора @
. Для меня это признак кодовой гнили. Хотя я знаю, что он прост в использовании и проще, чем правильно обрабатывать ошибку, я думаю, что это просто короткий путь, который сделает жизнь сложнее для вас. Вы можете избежать этого несколькими способами. Сначала вы можете проверить строку перед тем, как передать ее unserialize
. Убедитесь, что он не пуст, строка и т. Д. Во-вторых, вы можете установить error handler
для исключения исключений из ошибок PHP (что я делаю). Таким образом, вы просто заверните вызов unserialize
в блок try {} catch(){}
. Это лучше, так как вы действительно можете проверить ошибку, а не просто полагаться на то, что заброшенная ошибка - это то, что вы думаете ...
Подавление ошибки с @ всегда плохо! – Shoe