Досить часто, при написанні PHP коду, виникають ситуації, коли робочий на вигляд код не працює. Після деяких досліджень, ви виявляєте, що використовували неправильну функцію для перевірки змінної в PHP. Існує багато функцій в PHP, які призначені для перевірки стану і значення змінних, в тому числі ті, які можуть повідомляти вам, чи є якесь значення, доступне взагалі для використання. Серед цих функцій, виділяються особливо три: isset(), empty() та is_null(), які легко переплутати.
В сьогоднішньому уроці ми розглянемо основні відмінності цих функцій, а також приклади їх використання в PHP.
Всі ці три функції вбудовані в PHP, тому при написанні коду вони завжди доступні для використання. Перші дві – empty() та isset() – це мовні конструкції, а is_null() – це стандартна функція. При перевірці коду необхідно пам’ятати, що мовні конструкції в PHP трохи швидші (але, чесно кажучи, не значно), їх не можна використовувати в змінних функції, і вони не видають помилки при оцінці змінних, яких не існує.
Давайте для початку розглянемо синтаксис і короткий опис цих трьох функцій, який зазначено в офіційному керівництві php.net.
Синтаксис функції:
<?php empty ( mixed $var ) : bool ?>
Визначає, чи є змінна порожньою. Змінна вважається порожньою, якщо вона не існує або якщо її значення дорівнює FALSE. При цьому, якщо змінна не існує, функція empty() не видає попередження.
Синтаксис функції:
<?php isset ( mixed $var [, mixed $... ] ) : bool ?>
Визначає, чи встановлена змінна, і чи не має вона значення NULL.
Якщо змінна була скинута (вилучена) з допомогою функції unset(), така змінна більше не буде встановлена. Функція isset() при тестуванні (перевірці) змінної поверне FALSE, якщо для неї встановлено значення NULL. Також зверніть увагу, що нульовий символ ("\0") не еквівалентний PHP константі NULL.
Якщо задано кілька параметрів, тоді isset() поверне TRUE, але тільки якщо всі параметри визначені. Оцінка йде зліва направо і зупиняється, як тільки зустрічається невстановлена змінна.
Синтаксис функції:
<?php is_null ( mixed $var ) : bool ?>
Визначає, чи є у даної змінної значення, рівне NULL.
З наведених вище визначень видно, що ці три функції виконують подібні, але не однакові функції. За допомогою цих функцій ви можете перевіряти, чи є змінна нульовою (NULL), істинною (TRUE) або хибною (FALSE), а також чи була змінна оголошена.
При використанні empty(), ви можете перевіряти, чи є змінна хибною (false), але також і те, чи існує змінна. Цю функцію найкраще використовувати, коли ви хочете переконатися, що змінна існує і має значення, яке не дорівнює false. Зверніть увагу, що PHP буде обробляти порожні рядки, цілі числа 0, числа з рухомою комою 0.0, порожні масиви і логічне значення false як false. Таким чином, в основному, використовуйте empty() тільки тоді, коли ви хочете переконатися, що в змінної є якесь фактичне значення.
Оскільки вам не потрібно оголошувати змінні перед їх використанням в PHP, ви можете опинитися в ситуації, коли ви намагаєтеся виконати дії або запустити іншу перевірку для змінної, яка ще не була оголошена. Хоча з цієї та інших причин рекомендується оголошувати змінні перед використанням, ця помилка – одна з причин того, що empty() використовується не так, як isset().
Якщо ви використовуєте isset(), ви можете спеціально перевіряти, чи була змінна вже оголошена і що її значення не дорівнює null. Таким чином, поки у вас є оголошена змінна, у якої встановлено значення, але не значення NULL, при тесті ви отримаєте true. Це хороша умова для перевірки, перед виконанням інших перевірок для виконання дій зі змінною. Приклад:
<?php
$variable = 'Певний рядок'; // Оголошення змінної
// Перевірка існування змінної, потім перевірка значення
if ( isset($variable) && $variable !== 'Якийсь другий рядок' ) {
echo 'Цей код спрацює, оскільки обидві умови вірні';
}
?>
У наведеному вище прикладі ми оголосили нашу змінну у вигляді рядка, а потім перевірили, чи встановлена змінна (встановлена), і вона не дорівнює іншому рядку (вона не дорівнює). Оскільки обидві ці умови вірні, ми в цій умові можемо проводити подальші дії зі змінною та її значенням.
Нарешті, функція is_null() працює аналогічно функції isset(), з одною ключовою відмінністю: змінна повинна бути оголошена, щоб повернувся true, навіть за умови, що вона оголошена без будь-якого значення або визначена як NULL.
В іншому випадку функція is_null() не тільки не буде правильно працювати, але й буде повертати сповіщення через неможливість провести перевірку. Зазвичай сповіщення виглядає приблизно так:
Notice: Undefined variable: variable in /{PATH}/ on line X
Оскільки isset() є мовною конструкцією і може обробляти змінні, що не були оголошені, зазвичай рекомендується використовувати isset() в більшості випадків. Якщо вам потрібно використовувати is_null(), вам потрібно знайти інший спосіб функціонування вашого коду.
У наведеній нижче таблиці розглянуті основні результати використання даних функцій в PHP коді:
| Значення змінної ($var) | isset($var) | empty($var) | is_null($var) |
|---|---|---|---|
| “” (пустий рядок) | bool(true) | bool(true) | bool(false) |
| ” ” (пробіл) | bool(true) | bool(false) | bool(false) |
| FALSE | bool(true) | bool(true) | bool(false) |
| TRUE | bool(true) | bool(false) | bool(false) |
| array() (пустий масив) | bool(true) | bool(true) | bool(false) |
| NULL | bool(false) | bool(true) | bool(true) |
| “0” (0 у вгляді рядка) | bool(true) | bool(true) | bool(false) |
| 0 (0 у вгляді цілого числа) | bool(true) | bool(true) | bool(false) |
| 0.0 (0 у вгляді числа з рухомою комою) | bool(true) | bool(true) | bool(false) |
| змінна $var; (змінна оголошена, але без значення) | bool(false) | bool(true) | bool(true) |
На сьогодні все. Дякуємо, що читаєте нас!
WordPress роками був неперевершеним "монолітом": він відповідав і за зручну адмін-панель, і за збереження даних,…
У світі веб-серверів часто говорять про протистояння Nginx vs Apache. Але що, якби я сказав…
Коли я починав свій шлях у веб-розробці, питання "який веб-сервер використовувати?" практично не стояло. Відповідь…
Коли мова заходить про веб-сервери, два імені завжди на слуху: Apache та Nginx. Apache —…
У світі веб-розробки ми постійно стикаємося з проблемою: "А в мене на комп'ютері все працює!".…
На зорі моєї кар'єри веб-розробника все було відносно просто: встановив локальний сервер (пам'ятаєте Denwer?), поклав…