![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
HackMan |
|
||||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 1 Всего: 9 |
Сколько уже пишу на PHP, но всё мучает глупый вопрос. Пересмотрел не одну сотню скриптов, и в каждом программисты пишут по-своему.
В чём суть... Надо проверить, существует ли переменная, если да - то проверить что в ней и выполнить соответствующие действия. Я лично делаю так:
То есть, сначала проверяю, существует ли такая переменная, и уже потом проверяю что там за значение. В чужих скриптах чего только не встречал. Одни делают лишь проверку isset(), другие придумывают разные комбинации с @, третьи не делают проверку isset(), а сразу пишут !empty(), ещё одни запихивают всё в один if (if (isset($_GET[value]) && !empty($_GET[value])). Вот мне очень интересно, как надо? В документации написан такой кусок кода
То есть можно смело делать только одну проверку на empty(), пропуская isset()? -------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
||||
|
|||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
empty проверят и на то существует-ли переменная и присвоено-ли ей значение отличное от null сразу.
isset проверяет только на существование переменной. |
|||
|
||||
HackMan |
|
||||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 1 Всего: 9 |
То есть вместо
можно сразу писать
не переживая за то, инициализирована ли у нас $_GET[value], правильно? Это сообщение отредактировал(а) HackMan - 21.2.2008, 15:40 -------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
||||
|
|||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: нет Всего: 16 |
...следовательно, проверку isset + empty пишут люди, не понимающие, что они делают (таких, впрочем, среди РНР программистов большинство).
Вообще, HackMan, ты свалил в одну кучу разные случаи. И ответ на вопрос "как надо" зависит не от какого-то Устава Программистской Службы, а от конкретной задачи, стоящей перед программистом. К примеру, если стоит задача заткнуть рот слишком разговорчивому интерпретатору, то конструкции $var=(isset($_GET['var'])?$_GET['var']:""; и $var=@$_GET['var']; - равнозначны Если стоит задача проверить переменную на пустоту, то empty. И так далее |
|||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 1 Всего: 9 |
GeneralElectric, задача состоит в том, что бы выполнить функцию, зная что в неё не попадут не инициализированные параметры, вот
![]() -------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: нет Всего: 16 |
HackMan, в этом случае empty не при чем вообще, а параметры просто инициализировать, перед вызовом функции.
isset будет при этом использоваться для проверки, установлена ли переменная. |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Если было, сори, все не читал, только сабж.
Итак, empty возвращает true только в том случае, если переменная существует и хиъее значение не false (а так же не NULL, не 0 и не пустая строка)[/b] Например, empty нельзя использовать для переменных, для которых значение 0 является допустимым. Функиця isset только проверяет существование переменной, что находится внутри переменной - ее не интересует. Теоретически должна работать немного быстрее (хотя в наше время это значения не играет). Лично я использую функцию isset для тех переменных, который могут содержать в значение 0, false, NULL или пустая строка. Добавлено через 59 секунд Сама по себе функция empty выполняет задачу isset + проверят значение переменной. |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
||||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 1 Всего: 25 |
Можно сказать проще.
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. Это сообщение отредактировал(а) flashaa - 22.2.2008, 21:11 |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 1 Всего: 42 |
Скорее всего имелось ввиду isset возращает FALSE, если переменная === null -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
topy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.2.2008 Репутация: нет Всего: 1 |
Хм... еще можно так:
|
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 1 Всего: 25 |
||||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |