У мене є питання щодо NULL
PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Чому я бачу нульове значення, коли $a
порожній рядок? Це помилка?
У мене є питання щодо NULL
PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Чому я бачу нульове значення, коли $a
порожній рядок? Це помилка?
Відповіді:
Що ви шукаєте:
if($variable === NULL) {...}
Зверніть увагу на ===
.
При використанні ==
, як ви робили, PHP трактує NULL , помилкове , 0 , в порожню рядок, і порожні масиви в якості рівних.
== null
відповідає порожній рядок, а не просто недійсний чи невизначений.
$a = ''
є порожнім string
, false
булевим, $a = 0;
цілим і null
є від типу null
. Що говорить ОП, це те, що PHP передасть їх як "однакові" за значенням, але не як "однакові" за типом. Тож сувора ===
перевірка також перевірятиме тип та помилку, якщо ви використовуєте різні. Ось чому ви повинні бути послідовними у повернених цінностях. Якщо ви нормально повертаєте рядок таким способом getName()
, ви не повинні отримувати, null
коли він порожній, але, швидше за все, порожній рядок $user->getName() === ''
або $user->getId() === 0
або $user->isActive === false
. Цільова поведінка!
Як показано в наступній таблиці, empty($foo)
він еквівалентний $foo==null
і is_null($foo)
має ту саму функцію $foo===null
. У таблиці також показані деякі хитрі значення щодо null
порівняння. (eno позначає неініціалізовані змінні.)
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
Я ніколи не використовую empty()
і is_null()
функціоную. Використання простого порівняння менш неоднозначне, швидше і чіткіше. Особливо будуть менше фігурних дужок, щоб відповідати.
наприклад if($x==null || $y==null)
vsif(is_null($x) || is_null($y))
==null
і ===null
.
перевірити ==
проти===
'' == NULL
повернеться правдивим
0 == NULL
, повернеться істинним
false == null
, повернеться правдою
де як
'' === NULL
повернеться хибним
0 === NULL
, повернеться помилковим
false === NULL
, повернеться хибним
Ні, це не помилка. Подивіться на порівняння таблиці « =» з таблицею == (друга таблиця), яка показує результат порівняння кожного значення у першому стовпці зі значеннями в інших стовпцях:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Там ви можете бачити , що порожній рядок по ""
порівнянні з false
, 0
, NULL
або ""
дасть справжній.
Ви можете замість цього використати is_null
[docs] або суворе порівняння (третя таблиця).
0
при передачі в рядок: codepad.org/qi40SG3E . Отже (int)"php" == 0
.
Це не помилка, а нормальна поведінка PHP. Це відбувається тому, що ==
оператор у PHP не перевіряє тип.
'' == null == 0 == false
Якщо ви також хочете перевірити, чи значення мають однаковий тип, використовуйте ===
замість цього. Щоб глибоко вивчити цю різницю, будь ласка, прочитайте офіційну документацію .
Використання empty
- http://php.net/manual/en/function.empty.php .
Приклад:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable
. Те, що ви хочете, це насправді:$variable == null
(зверніть увагу==
)