E_NOTICE так ли это плохо?

Userpic

Новичок
E_NOTICE так ли это плохо?

Доброго времени суток.
Вот решил попробовать писать скрипты с включенным E_Notice
когда переменная не определена это понятно- плохой стиль
но так ли это плохо когда принимаешь в скрипте переменные
к примеру
PHP:
if($_GET['type']=='abc'){"...action...";}else{"...default...";}
почему эта проверка выглядит не красиво со стороны E_NOTICE ?
PHP:
if(isset($_GET['type']) AND $_GET['type']=='abc')
Понятно, что это грамотней, но лучше ли?
Вызов постоянно доплонительных функций это время, пусть и не много.

Объясните пожалуйста.
 

WP

^_^
Ресурсов копейки. Не знаю как другие, а я вот как подошел к задаче. Нужно проверять не только существование переменной, но и её тип, поэтому я сделал
PHP:
function gpcvar_str(&$var) {return strval($var);}
function gpcvar_int(&$var,$empty = FALSE) {if ($empty and strlen($var) == 0) {return '';} return intval($var);}
function gpcvar_array(&$var) {return is_array($var)?$var:array();}
И в скриптах для получения какого-либо параметра делаю например if (gpcvar_str($_REQUEST['var']) == 'test'). Ф-ция gpcvar_str всегда возвращает строку, gpcvar_int - число, gpcvar_array - массив. Нотисы не дает из-за того что функции принимают ссылку на переменную, а не саму переменную. Как известно, можно создать ссылку на несуществующую переменную.
 

Vladson

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

на вскидку
рнрВВ2.0.8 - XSS в faq.php
punBB (не помню версию) - РНР инклудинг
Ряд дыр в IPB 1.3.x
и это только то что я помню...
 

vadim

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

С другой стороны, выключение данной ошибки может сэкономить количество кода. Раз ПХП работает без проблем с данным типом ошибок, значит можно и так программить.

Выбор за программистом (или его начальством).
 

Vladson

Сильнобухер
>>> Другой вопрос, что человек не робот
Вот этим фактом многие принебрегают, что часто и приводит как к мелким глюкам, так и к серьёзным уязвимостям...
 

phprus

Moderator
Команда форума
выключение данной ошибки может сэкономить количество кода
Сэкономленный код не компенсирует нервные клетки потеренные при отладке проекта с выключенными E_NOTICE.
 

WP

^_^
phprus
А я всю сознательную жизнь с выключенными кодил и нормально, без ошибок =)

Количество кода не увеличивается.
 

phprus

Moderator
Команда форума
WP
После одного случая когда я обнаружил, что на взгляд о и o отличить нельзя (Одна русская, вторая английская) я всегда пишу программы так, чтобы они работаль с включенными E_NOTICE.

А проблема была в том, что у меня не передовалась переменная, из-за того что я вместо английской o в названии написал русскую о.
 

WP

^_^
Дык var_dump($_REQUEST); и там будут два индекса по виду одинаковые, если мой вариант юзать.
 

vadim

Guest
WP
Я тоже с выключенным пишу.
Просто надо знать, где могут возникнуть неприятности, там и перепроверять переменные.
Тем более у меня почти все переменные это инстанции классов, просто так в скрипте только какой нибудь $i для for валяется
 

phprus

Moderator
Команда форума
WP
Дык когда со мной произошел вышеописанный случай я о существовании вашего варианта не знал. :)

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

Kelkos

Сам себе программер
Выполнение кода с ошибками требует на порядки больше времени, чем оператор isset().
а интересно было бы потестить.. Помоему с этом споре это может стать неплохим аргументом.
 

Фанат

oncle terrible
Команда форума
это не может быть в этом споре никаким аргументом.
потому, что во-первых, время мизерное, В ЛЮБОМ СЛУЧАЕ. (причём это хороший тест интеллекта. как только человек заикается о скорости в таких случаях - считай, идиот) а во-вторых, причина объявлять переменные - СОВСЕМ ДРУГАЯ, и аргументы СОВСЕМ ДРУГИЕ.
просто некоторым, опять же, не хватает мозгов это понять
 

leeroy

Новичок
Фанат
К чему такие страсти ? У тебя явно какой-то комплекс. Ты тока в сети и расслабляешся , обсирая людей . Хотел бы я посмотреть на тебя в реале ....
 

Romantik

TeaM PHPClub
leeroy
Предупреждение!
1. отвечай по смылу вопроса! Нечего по теме сказать- не флуди!
2. личные ощущения в личку.
 

StUV

Rotaredom
имхо:

1. программить надо с E_ALL
2. никаких варнингов и нотайсов в релизе быть не должно

из личного опыта - пренебрежение этими правилами приводит к логическим ошибкам, которые отлавливаются многочасовой отладкой...

подход к пхп как к яп с строгой типизацией и контролем за инициализацией упрощает жизнь девелопера очень и очень...
 
Сверху