Объясните мне, пожалуйста, почему использование необъявленной переменной вызывает Notice, а не Fatal Error? Просто я пришел в php, уже после небольшого знакомства с Java, который на такие манипуляции тут же выкатывает {PARAM_NAME} cannot be resolved, что, на мой взгляд, очень удобно. Мое ИМХО: Объвлять переменный перед использованием это "хороший тон", и удобно это в 1-ю очередь самому программисту. (почему я думаю всем и так понятно). Из этого следует, что если переменная не объявлена, то либо это "опечатка", либо объявление, в котором зачастую и присваивается значение, пропущено. И в том и другом случае скрипт с большой вероятностью будет работать некорректно. А уж отлавливать "засобаченные" переменные в чужих скриптах это просто песня Из всего этого следует, что лучше всего на использование необъявленной переменной выкатывать FatalError. Но, ведь разработчики PHP были умными людьми и куда опытнее меня, значит они это сделали это не случайно. Если Вы знаете причину, по которой лучше выдывать Notice, а не Fatal Error, не могли бы Вы меня просвятить, немного?
Потому что в PHP объявление переменной до её использования не обязательно. Т.е. в принципе для PHP пофигу: $param = date(); и echo $param; Он просто тебя предупреждает, что такой переменной нету и вернёт пустоту.
dAllonE по той же причине, по которой отменили объявление типов. Нравится писать с фаталами, пиши на С++, в бонус там тебе еще типы дадут =) А если как попроще хочешь, то юзай нотисы. Не понимаю совершенно негодование по этому поводу. Если бы нотисы не выдовались было бы хоть отчасти понятно =)
dAllonE Собаки сцуко хоршие =) Если они юзаются в качестве подавления нотиса необъявленной переменной, то все не так страшно как малюет Psih =)
Да, только 700% падение скорости работы того куска кода, на который поставлена собака Да и вообще, нельзя писать так, что бы появлялись не объявленные переменные, потому что ситуации, когда в переменной ожидается совсем не null постоянны.
Я понимаю, что PHP, в отличии от компилируемого языка в принципе не особенно важно объявление до использования. Я имею в виду, что это неудобно в принципе, т.к. в теории может породить кучу доп. ошибок (что у новичков вроде того с "засобаченным" кодом которого я возился вчера и происходит), а пользы ИМХО никакой. Но раз: Тогда все понятно.
Psih Где тут 700%????? Хочешь сказать это работает PHP: <?php $id = (int) @$_GET['id']; ?> на 700% медленее, чем это? =)))) PHP: <?php if (!empty($_GET['id'])) $id = (int) $_GET['id']; else $id = 0; ?> Не смеши мои тапочки. Результаты тестов в студию =)))))
Написание кода ламерами может порадить еще больше ошибок в независимости от языка. Если юзаешь собаку то нужно юзать ее с умом. А если не юзаешь, то E_ALL спасет тебя.
Мне тут подумалось, а не связано ли это изначально как-то с register_global?... С другой стороны я тоже считаю что так оно _удобнее_. Иначе бы скрипты "распухали" в начале объявлением сотен переменных... Я представил себе такое сейчас... Это ужасно...