Есть ли удобная замена конструкции... if(@$v) $v=...

cDLEON

Онанист РНРСlub
Всё же....Разразилсо холивар 8).
*****
По поводу empty - погарячился.
в нормальном коде пишут if($blabla=="blabla")
Т.е. ты предлагаешь все переменные из $_GET,$_POST,и т.д., дублировать ? Ведь не возможно предсказать появится она или нет. Как поступить с юзверьским вводом? Мне, почему то, не в кайф перед проверкой переменной на определённое значение (будь то свитч, либо условие) писать что то вроде:
PHP:
if(isset($_POST['blabla']))
 $blabla=$_POST['blabla'];
else
 $blabla="";
Делаете из скрипта - СИ....
Мне же проще написать
PHP:
switch(@$_GET['action']) {
 case "delete":
 break;
 ...
}
Чем это затрудняет отладку?
http://phpfaq.ru/debug2
просвещайся.
Ну примерно к этому я и пришёл. Только пару идеологических отличий. Но всё равно спс за ссылку.
 

tf

крылья рулят
cDLEON, get($_GET, 'action') трудно сделать?
пиши, но не предлогай делать это другим
 

cDLEON

Онанист РНРСlub
tf
пиши, но не предлогай делать это другим
А я и не предлагаю ни чего ни кому.
Я выражаю собственную мысль.
пиши, но не предлогай делать это другим
Мне то не трудно, только мне не понятно зачем эти буковки лишние. И чем @ так плохА, когда её использывать обдумано.
triumvirat
то это уже не программирование, а хрня. и в результате тоже хрня получается.
В вашем случае - возможно)
А в моём - все нужные ошибки отлавливаются, а ненужные нотайсы (там где переменной вообще может не существовать) фильтруются собакой.
 

Фанат

oncle terrible
Команда форума
Это не холивар.
Это азы. Азбучные истины.
В нормальных языках все переменные определяются заранее.
пхп со скрипом движется в сторону нормального языка.

а твоя аргументация с успехом подхдит для заявлений типа
"Мне, почему то, не в кайф перед составлением запроса писать что то вроде mysql_escape_string(). Ведь пхп сам может автоматом прослешить все данные"
или
"Мне, почему то, не в кайф писать $_POST['blabla']. Ведь пхп сам может автоматом назначить значение переменной $blabla"
 

Фанат

oncle terrible
Команда форума
triumvirat
речь идет о том, что все переменные должны быть определены перед использованием.
Это, во-первых, повышает безопасность скрипта - нельзя перезаписать значение, как это пишут во всех примерах про регистер глобалс.
А, во-вторых, позволяет избежать неприятных ошибок в случае, когда переменной нету, а программа рассчитывает на то, что она есть
 

Breeze

goshogun
Команда форума
Партнер клуба
*****

Я имел ввиду проверки на содержимое %) без и.. как в а и б
 

cDLEON

Онанист РНРСlub
*****
Это азы. Азбучные истины.
Ну извени, в универе не учился, азбуку ни кто не преподавал.
Программирую как удобно МНЕ, А не так, как требуют книжки (которые кстати, тоже кто то писал). Я, возможно, не притендую на авторство для написания собственной книги, но и достойных обоснований на эту тему я не прочёл.
Все сводится к одному:
Что цель - чтобы переменная всегда была определена
Не понятно....А что случится в случае, если я узнаю что она не определена непосредственно в месте, в котором идёт уже рабочий код?(пример с свитчем). Как это повлияет на отладку, как это повлияет на быстродействие, как это повлияет на приложение вцелом?
Не-а, программирование — либо ремесло, либо искусство.
+++++
 

Фанат

oncle terrible
Команда форума
cDLEON
В принципе, втой подход имеет право на существование.
как пользование raw функциями mysql_*, например, вместо методов класса БД.
В обучающих целях или для простых проектов.
Но если стремиться к профессиональному росту, то надо уходить от костылей интерпретатора, и не использовать переменные по мере появления в них надобности, а объявлять в начале скрипта
 

Popoff

popoff.donetsk.ua
*****
я, возможно, параноик, но, хотя мой подход к программированию - такой, что а) все ожидаемые переменные заведомо определены и б) никаких дополнительных неожидаемых переменных возникнуть не может, я всё равно проверяю их на empty(), так как в 95% случаев любое значение, которое может быть распознано как empty() - это недопустимое значение для моего скрипта. Просто всякие фокусы с echo 0==''?'y':'n'; и прочие уязвимости, основанные именно на использовании empty() значений настораживают... Я, конечно, не забываю ставить === везде, где в ней есть необходимость, но и проверку на empty() лишней вовсе не считаю.

-~{}~ 27.11.07 17:56:

раз уж мы имеем удовольствие программировать на РНР, а не на С...
 

Фанат

oncle terrible
Команда форума
Popoff
К сожалению, в этой теме я плаваю, и не могу сказать ничего умного.
Но по поводу конкретного примера
if(!empty($blabla) && $blabla=="blabla") - я бы скоррее добавил в нем третий знак равно вместо емпти.
 

Popoff

popoff.donetsk.ua
*****
а я обычно там и емпти, и три равенства использую %)
только обычно у меня это две разные проверки.
например, если это проверяется какой-нить код регистрации, то я а) проверяю, что принятый код - допустимый (не пустой как минимум, а в более сложных случаях могу и дополнительных проверок добавить на длину, на использованные символы - зависит от конкретной ситуации), а потом, если предыдущие проверки прошли, проверяю на равенство с ожидаемым кодом, естественно, с помощью ===, так как я вполне ожидаю, что и там и там строка, и если даже я в своих предыдущих проверках допустил ошибку и пропустил какую-нибудь нестроку, то эта === эту ошибку отсечёт.

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

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

и вопрос тут не в том, чтобы перестраховываться, а просто в том, чтобы везде делать одинаково и везде иметь ожидаемые значения. понятно, что не везде проверка empty() имеет 100% необходимость, но если я приучу себя к тому, что делать проверку на empty() не обязательно, то я могу легко забыться (чего-нибудь недоучесть, упустить из виду какую-нибудь мелкую деталь) и не поставить эту проверку там, где её поставить следовало бы.

тут на самом деле вопрос только в выборе одного из двух - 1) поставить ли автоматом empty() и не париться, концентрируясь на других особенностях алгоритма, или 2) кроме тех других особенностей ещё концентрироваться и на empty().
 

Ноябрь

Новичок
пардон..
В нормальных языках все переменные определяются заранее.
Вот у меня код делится на 2 части, точнее на 3.
программная, где предварительно описываются переменные, а затем, забиваются все массивы данными из базы.

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

korchasa

LIMB infected
Откуда "неожиданность" переменных и их типов? Даже пользовательские данные это строка, на которую накладывается всего одно условие - ее может не быть.
 

Ноябрь

Новичок
if(isset($_POST['blabla']))
пардон, опять же..
но разве массив $_POST не всегда заполнен?, форма же.. и если юзер поле не заполнил, значит $_POST['blabla']="", т.о. критерием заполнения поля служит условие empty или @, потому как переменная определена!
 

Ноябрь

Новичок
но если он не заполнен, то уж точно пуст.
помоему какая-то боязнь перед неизвестностью:)
 

cDLEON

Онанист РНРСlub
Ноябрь
Ваши утверждения ошибочны.
Читать лекцию я вам не буду, лучше поищите в гугле спецификацию HTTP протокола.
 
Сверху