Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Тонкости, или слон по клумбам..

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: конструкции...конструкции...конс трукции...
DeepVarvar Супермодератор
Отправлено: 02 Мая, 2009 - 07:20:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Друзья, назрел очередной вопрос.. Есть две приблуды в РНР:
empty() и isset()...
PHP:
скопировать код в буфер обмена
  1. <?if (!empty($variable)) { print $variable; } ?>

PHP:
скопировать код в буфер обмена
  1. <?if (isset($variable)) { print $variable; } ?>

Оба кода эквивалентны.. Зачем ДВЕ функции с одинаковыми возможностями?
Я не говорю что чтото не нужно, я хочу понять зачем? Одна из них отличается по функционалу и/или возможностям? Обьясните где и в каких случаях рекомендовано использовать первую/вторую.. и почему... Не понял
 
 Top
Roler
Отправлено: 02 Мая, 2009 - 08:06:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




С помощью empty можно проверить ещё и просто на пустоту. Когда переменная объявлена, но пуста.

(Отредактировано автором: 02 Мая, 2009 - 08:06:44)

 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Мая, 2009 - 10:29:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




а если будет так:
PHP:
скопировать код в буфер обмена
  1. <? if (isset($variable) && !empty($variable)) { print $variable; } ?>

выходит empty() проверяет только пустоту...
а isset() наличие неременной...
по идее интерпретатор не будет ругаца на empty() проверку необьявленной переменной, однако насколько я понял из соображений верного подхода юзать надо обе функции...
и unset()...
 
 Top
Гость
Отправлено: 02 Мая, 2009 - 10:35:28
Post Id


УДАЛЁН










DeepVarvar Если вас интересует пришла ли переменнае Get/Post методом то впринципе уже чувствутеся разница между этим функциями - если в форме не было поля abc то isset($_REQUEST['abc']) вернет false а елси поле было но оно было пустоен и пустое передалось то isset($_REQUEST['abc']) вернет true а empty($_REQUEST['abc']) вернет true
 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Мая, 2009 - 10:40:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




я не привязан сейчас к конкретной необходимости использовать пример обсуждаемый нами тут.. а за ответы спасиб!!!
 
 Top
valenok Модератор
Отправлено: 02 Мая, 2009 - 11:21:11
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Вопервых - будет ругаться за проверку на пустоту необъявленной переменной.
Во вторых null, 0, '', false проходят за пустые. isset проверяет наличие переменной, empty проверяет её значение.


-----
Truly yours, Sasha.
 
My status
 Top
DeepVarvar Супермодератор
Отправлено: 02 Мая, 2009 - 11:38:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




значит всетаки так:
PHP:
скопировать код в буфер обмена
  1. <? if (isset($variable) && !empty($variable)) { print $variable; } ?>
 
 Top
Roler
Отправлено: 02 Мая, 2009 - 12:52:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




DeepVarvar
Нет, не так. Используйте одну функцию.
 
 Top
Гость
Отправлено: 02 Мая, 2009 - 13:16:49
Post Id


УДАЛЁН










valenok Таки нет а именно переменная установленая в NULL и неопределенная переменная это одно и то же - можете проверить то есть unset($abc) это то же саоме что $abc=NULL по сей причине isset на переменную равную NULL вернет true
 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Мая, 2009 - 13:23:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




хм... а в случае с проверкой $_GET['variable'] всетаки стоит использовать обе ф-ции...

1. пришел ли?
2. не пуст ли?

JustUserR, unset($abc) это то же саоме что $abc=NULL... т.е.?
CODE (text):
скопировать код в буфер обмена
  1. $abc='abc';
  2. unset($abc);
  3. if (isset($abc)) { print 'переменная не пропала!!!'; }
  4. else { print 'тютеньки!!!'; }
что выведет???
Я думаю пойдет по ветви else...

(Отредактировано автором: 02 Мая, 2009 - 13:40:40)

 
 Top
valenok Модератор
Отправлено: 02 Мая, 2009 - 13:53:12
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




JustUserRугу, про null это я что-то не в тему написал..
DeepVarvar да. напишет тютеньки.


-----
Truly yours, Sasha.
 
My status
 Top
DeepVarvar Супермодератор
Отправлено: 02 Мая, 2009 - 14:06:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Я понимаю что "тютеньки", поэтому unset($abc) это НЕ то же самое что $abc=NULL...
 
 Top
valenok Модератор
Отправлено: 02 Мая, 2009 - 14:10:02
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




тоже самое.

$abc=null;
if (isset($abc)) { print 'переменная не пропала!!!'; }
else { print 'тютеньки!!!'; }

тоже выведет тютеньки


-----
Truly yours, Sasha.
 
My status
 Top
Ch_chov
Отправлено: 02 Мая, 2009 - 14:14:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Цитата:
а в случае с проверкой $_GET['variable'] всетаки стоит использовать обе ф-ции...

Зачем ? Если ты точно знаешь, что значение переменной не может быть равно нулю или пустой строке, то удобней пользовать просто empty.
 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Мая, 2009 - 14:22:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Спасибо ребят!!! Вот где подводные камни!!! А ведь без глубокого и ВЕРНОГО понимания свойств ф-ций можно наваять ошибочную логику мозга сайта... ))))))
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB