Главная страница » Статьи и уроки » PHP статьи » Почему нужно четко понимать ISSET и EMPTY различия в PHP
Опрос
Вы занимаетесь разработкой сайтов?
Выделенные и виртуальные серверы в Европе

Почему нужно четко понимать ISSET и EMPTY различия в PHP

Автор: administrator Дата: 30-04-2016, 00:47 Категория: Статьи и уроки / PHP статьи
Как бы не ругали PHP за слабую и плохую типизированность помноженную на кучу функций на все случаи жизни, у него есть полно плюсов как простота при подходе к решению задач, обилие инструментов по умолчанию и т.д.

Один вот нюанс я заметил, что часто встречается у разработчиков на PHP это люди путают назначение функций empty и isset.

Вот вам пример, как вам кажется этот код хорош или нет?


if(isset($params['alias'])) $where[] = 'str = "'.addslashes($params['alias']).'"';


я даже не буду ничего говорить про addslashes без проверки magic_quotes* если вы не новичок вам и так понятно, да и всё же дальше используется dibi библиотека в которой есть гибкий и очень удобный конструктор запросов и плэйсхолдер по умолчанию. Что люди не используют всех возможностей библиотек и так ясно, это просто лень почитать одностраничный ман.

Речь не об этом, речь об isset и empty.

Что мы знаем об empty? Это на самом деле простая директива или конструкция языка, которая проверяет переменную на пустоту и не выдаёт предупреждения, если даже переменная не определена, то есть она совмещает в себе функцию isset
empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set.

Второе, что такое пустота для PHP. Именно за такие вещи многие не любят PHP или многие не любят после PHP другие языки, когда пустота в них имеет определенное значение например nil (Ruby, puts nil.class) или undefined (JS).

В PHP пустота это 0, "", array(), 0.0, FALSE, Null или просто даже без значения определенная переменная:
The following things are considered to be empty:
 "" (an empty string)
 0 (0 as an integer)
 0.0 (0 as a float)
 «0» (0 as a string)
 NULL
 FALSE
 array() (an empty array)
 var $var; (a variable declared, but without a value in a class)


История с isset вообще проще, это так же конструкция языка, которая проверяет только две вещи: объявлена ли переменная ($var; например) и не является ли она NULL!
Всё!

То есть получается, что вот код.

$name = '';
if( isset($name) ) echo "Hello {$name}\n";
if( !empty($name) ) echo "Good night {$name}\n";

Выдаст всё же не тот что нам как бы нужен:
> Hello

Так и выше код соберётся с ненужным условием и даже скорее неправильным (!!!) условием, когда было происходит сбор параметров

 $params['alias'] = $_GET['alias'];

...
// сбор sql запроса, для PHP переменная $params['alias'] всё же объявлена, НО ПУСТАЯ!
if(isset($params['alias'])) $where[] = 'alias = "'.addslashes($params['alias']).'"';


ваш SQL запрос получится смешного вида alias = '', хотя я уверен вам бы хотелось видеть его совсем иного вида.

Поэтому я всё же правильнее понимать отличия где и когда использовать isset и empty.

Удачи, оставайтесь на стороне разума!
  • Не нравится
  • 0
  • Нравится
Просмотров: 1 801 Напечатать Жалоба
Теги: ISSET EMPTY php
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.
Написать комментарий
Ваше Имя:
Ваш E-Mail:
  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги

Введите два слова, показанных на изображении: