Почему @unset выдает ошибку разбора? - PullRequest
6 голосов
/ 13 января 2011

Почему вы не можете скрыть ошибки с оператором @ при вызове unset? Следующие результаты приводят к ошибке разбора:

@unset($myvar);

Ответы [ 4 ]

10 голосов
/ 13 января 2011

Оператор @ работает только с выражениями, а unset является языковой конструкцией, а не функцией. См. справочную страницу для получения дополнительной информации:

Примечание: @ -оператор работает только на выражения. Простое правило это: если вы можете принять значение что-то, вы можете добавить @ оператор к нему. Например, вы можете добавить его к переменным, функции и include () вызовы, константы и т. д. вперед. Вы не можете добавить это к определения функции или класса, или условные структуры, такие как если и foreach и т. д.

5 голосов
/ 13 января 2011

Вы можете скрыть ошибки, добавив префикс @ к функциям / операторам. Однако unset - это языковая конструкция, поэтому она не поддерживает @ -rule.

Хорошо, что unset () никогда не завершается сбоем, даже если переменная не существует с самого начала, поэтому в этом нет необходимости.

Как уже упоминал ночной взломщик, использование @ - довольно плохая практика.

4 голосов
/ 13 января 2011

Оператор подавления ошибок работает только с выражениями:

unset является языковой конструкцией, а не функцией, поэтому @ использовать нельзя.

0 голосов
/ 13 января 2011

Почему нельзя скрыть ошибки с оператором @ при вызове unset?

Я не знаю. Но вы все равно не должны использовать оператор подавления ошибок (@). Есть два различных сценария:

Developemnt

Вы хотите видеть все ошибки в тот момент, когда они возникают , предпочтительно с необработанным сообщением об ошибке, которое дает вам PHP.

Производство

Вы хотите, чтобы не сообщал пользователю об ошибке PHP . Вместо этого вы хотите записать сообщение об ошибке PHP и отобразить свое собственное сообщение, которое может понять неспециалист.

Вы не можете достичь этого различия, когда используете @. Вы должны разделить эти сценарии, настроив display_errors , error_reporting и установив обработчик ошибок с помощью set_error_handler .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...