Yii и error_reporting — можно ли игнорировать Notice

Автор: Aport Суббота, Январь 31st, 2015 Нет комментариев

Рубрика: Язык PHP

Мне удобно работать с кодом, когда я PHP указываю:

error_reporting(E_ERROR | E_PARSE | E_COMPILE_ERROR);

Однако, оказалось в Yii сделать это не так просто, вот и пришлось разобраться.

Итак, покопавшись в Yii я обнаружил, что объявленные в index.php константы:

define('YII_ENABLE_ERROR_HANDLER',false);
define('YII_ENABLE_EXCEPTION_HANDLER',false);

действительно отменяют слежку за Notice, а возникший у меня:

Fatal error: Uncaught exception 'CException' with message 'Property "URL.pages" is not defined.

не относится к Notice в том смысле, какой придал бы ей стандартный подход PHP.

Yii выдает Fatal error потому, что у него в CComponent есть метод-проверки __get, который проверяет наличие изначально объявленных свойств в Вашем классе (это по мнению Yii обязательно). Чтобы игнорировать подобный Notice лично я в файле /YiiRoot/framework/base/CComponent.php для метода __get удалил код:

                throw new CException(Yii::t('yii','Property "{class}.{property}" is not defined.',
                        array('{class}'=>get_class($this), '{property}'=>$name)));

Зачем я так грубо поступил?

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

Почему я поощряю такой код?

Дело в том, что многое уже написано и дорабатывать желания нет, а Yii строг и отменить эту строгость никак не дает, хотя ситуация рядовая и всё работает например без объявления переменных в классе. Написание такого кода я не поощряю, но и не настаиваю на другом, ведь в мануалах PHP тоже нет маниакальных преследований плохого кода, а я заставлять других писать «правильный» код не собираюсь, кому интересно учить других — пусть учит, я не против.

 

Источник: yapro.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты