Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Для профи > isset + empty |
Автор: HackMan 21.2.2008, 14:44 | ||||
Сколько уже пишу на PHP, но всё мучает глупый вопрос. Пересмотрел не одну сотню скриптов, и в каждом программисты пишут по-своему. В чём суть... Надо проверить, существует ли переменная, если да - то проверить что в ней и выполнить соответствующие действия. Я лично делаю так:
То есть, сначала проверяю, существует ли такая переменная, и уже потом проверяю что там за значение. В чужих скриптах чего только не встречал. Одни делают лишь проверку isset(), другие придумывают разные комбинации с @, третьи не делают проверку isset(), а сразу пишут !empty(), ещё одни запихивают всё в один if (if (isset($_GET[value]) && !empty($_GET[value])). Вот мне очень интересно, как надо? В документации написан такой кусок кода
То есть можно смело делать только одну проверку на empty(), пропуская isset()? |
Автор: WolfON 21.2.2008, 15:28 |
empty проверят и на то существует-ли переменная и присвоено-ли ей значение отличное от null сразу. isset проверяет только на существование переменной. |
Автор: HackMan 21.2.2008, 15:39 | ||||
То есть вместо
можно сразу писать
не переживая за то, инициализирована ли у нас $_GET[value], правильно? |
Автор: GeneralElectric 21.2.2008, 15:40 |
...следовательно, проверку isset + empty пишут люди, не понимающие, что они делают (таких, впрочем, среди РНР программистов большинство). Вообще, HackMan, ты свалил в одну кучу разные случаи. И ответ на вопрос "как надо" зависит не от какого-то Устава Программистской Службы, а от конкретной задачи, стоящей перед программистом. К примеру, если стоит задача заткнуть рот слишком разговорчивому интерпретатору, то конструкции $var=(isset($_GET['var'])?$_GET['var']:""; и $var=@$_GET['var']; - равнозначны Если стоит задача проверить переменную на пустоту, то empty. И так далее |
Автор: HackMan 21.2.2008, 15:43 |
GeneralElectric, задача состоит в том, что бы выполнить функцию, зная что в неё не попадут не инициализированные параметры, вот ![]() |
Автор: GeneralElectric 21.2.2008, 16:19 |
HackMan, в этом случае empty не при чем вообще, а параметры просто инициализировать, перед вызовом функции. isset будет при этом использоваться для проверки, установлена ли переменная. |
Автор: CyClon 21.2.2008, 19:02 |
Если было, сори, все не читал, только сабж. Итак, empty возвращает true только в том случае, если переменная существует и хиъее значение не false (а так же не NULL, не 0 и не пустая строка)[/b] Например, empty нельзя использовать для переменных, для которых значение 0 является допустимым. Функиця isset только проверяет существование переменной, что находится внутри переменной - ее не интересует. Теоретически должна работать немного быстрее (хотя в наше время это значения не играет). Лично я использую функцию isset для тех переменных, который могут содержать в значение 0, false, NULL или пустая строка. Добавлено через 59 секунд Сама по себе функция empty выполняет задачу isset + проверят значение переменной. |
Автор: sTa1kEr 22.2.2008, 11:45 | ||
А так же не пустой массив. |
Автор: flashaa 22.2.2008, 12:32 |
Можно сказать проще. isset проверяет, равно ли значение переменной null (cобственно так эта функция и определена в мануале). isset возращает FALSE, если переменная === null. При этом надо помнить, что неинициализированная переменная === null(!). Отсюда и проверка на то, была переменная инициализирована. empty проверяет переменную, на то, может ли она быть преобразована в false. Как различные значения различных типов преобразуются в boolean, виднo на странице http://ru2.php.net/manual/en/types.comparisons.php Пустая строка, 0, пустой массив и тд - все эти значение преобразуются в false при приведении к булеву типу. Потому ф-ция empty для них возвращает true. Хотя, возможно факт, который я привел НЕ лежит в логике работы empty, однако этот факт подтверждается на практике. И при обдумывании возможных вариантов поведения empty с различными переменными стоит вспомнить таблицу преобразования переменных в boolean. |
Автор: topy 22.2.2008, 16:30 | ||
Хм... еще можно так:
|
Автор: flashaa 22.2.2008, 19:29 | ||
Да да. |