Php. Сравнение методов isset(), is_null() и empty()

Главная  >>  Backend  >>  Php. Сравнение методов isset(), is_null() и empty()

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

Поэтому решил сделать небольшую заметку и, конечно же, запостить ее в Блоге.

Итак, ниже приведена сравнительная таблица соответствия функции с определенными константами.
Список констант:

$undefined — простая, не объявленная в коде переменная
null — просто объявлена переменная. Никакого значения ей присвоено не было
0 — собственно, ноль
false — простое булево значение ЛОЖЬ
123 — простое числовое значение (типа int или float)
«» — строка (пустая)
В колонке «Функция» == и === означают то, что некое значение сравнивается с false. Например, для колонки 123 происходит выполнение операции: false == 123.

Функция $undefined NULL 0 false 353 «»
isset() false false true true true true
empty() true true true true false true
is_null() true true false false false false
== true true true true false true
=== false false false false true false

Результаты довольно интерессные. Как по мне php тут даже у JS не выигрывает. Там, как по мне, на порядок прозрачнее реализовано.


  • Сергей Кореневский

    Я нашел разницу между isset() и is_null(). Проблема не в том что они возвращают противоположное. Совсем в другом. Суть в Экспешене.
    class user{
    public int $id;
    public string $name
    }

    Создадим объект:
    $u = new user;
    А теперь сравнима эти две функции!!!!!
    var_dump(isset($u->id));
    var_dump(is_null($u->id));

    Мы видим что функция isset() работает и возвращает FALSE;
    А функция is_null() вызывает ошибку (Ecxeption)
    Вот оно как !!!!!!!!!!!
    Зачем это?
    PHP начал входить в мир типизации. И в мире типизации необходимо знать определено свойство или не определено!
    Удачи!!!

    • http://onfor.info onfor

      Очень интересно — признаюсь, не встречал такого поведения — обязательно изучу!

      Спасибо за Ваш комментарий! Удачи!

      • Сергей Кореневский

        Добавьте в функцию property_exists.
        Потому как в половине случаев isset, is_null и property_exists могут использоваться в одинаковых ситуациях. А именно в объектах эти функции используются со свойствами.