Почему браузеры соответствуют CSS-селекторам справа налево?

Примечание: во-первых, я понимаю, что 99% разработчиков PHP используют оператор подавления ошибок (я был одним из них), поэтому я ожидаю, что любой PHP-разработчик увидит, что это не согласуется.

Как вы считаете, действительно ли действительно использовать оператор @ для подавления ошибки / предупреждения в PHP, тогда как вы можете обрабатывать ошибку?

Краткий ответ: Нет!

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

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

Проблема в том, что кусок кода, с которым вы подавляете ошибки, в настоящее время может вызывать только ошибку, которую вы видите; однако, когда вы меняете код, на который полагается подавленная линия, или среда, в которой она выполняется, тогда есть все шансы, что линия попытается вывести совершенно другую ошибку из той, которую вы пытались игнорировать. Тогда как вы отслеживаете ошибку, которая не выводится? Добро пожаловать в отладку ада!

Мне потребовалось много лет, чтобы понять, сколько времени я трачу каждые пару месяцев из-за подавленных ошибок. Чаще всего (но не исключительно) это было после установки стороннего скрипта / приложения / библиотеки, которая была безошибочной в среде разработчиков, но не моя из-за разницы в конфигурации сервера или сервера или отсутствовала зависимость, которая могла бы нормально вывести ошибку немедленно предупреждая о проблеме, но не тогда, когда разработчик добавляет magic @.

Альтернативы (в зависимости от ситуации и желаемого результата): обрабатывайте фактическую ошибку, о которой вы знаете, так что, если часть кода вызовет определенную ошибку, тогда он не будет запущен в этой конкретной ситуации. Но я думаю, что вы получаете эту часть, и вы просто беспокоились о том, что конечные пользователи видят ошибки, и это то, что я сейчас адресую.

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

Для фатальных ошибок установите display_errors в выключенном состоянии (ваш обработчик ошибок все еще получает ) в вашем php.ini и включить ведение журнала ошибок. Если у вас есть сервер разработки, а также живой сервер (который я рекомендую), этот шаг не требуется на вашем сервере разработки, поэтому вы можете отлаживать эти фатальные ошибки, не прибегая к просмотру файла журнала ошибок. Существует даже трюк , использующий функцию выключения , чтобы отправить большое количество фатальных ошибок вашему обработчику ошибок.

Вкратце: пожалуйста, избегайте этого. Для этого может быть веская причина, но я еще не видел ее, поэтому до сих пор я считаю, что оператор подавления ошибок (@) является злым.

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

531
задан Community 23 May 2017 в 12:26
поделиться