У мене є питання щодо NULLPHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Чому я бачу нульове значення, коли $aпорожній рядок? Це помилка?
У мене є питання щодо NULLPHP:
$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(зверніть увагу==)