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