Intereting Posts
Зарезервированные символы в переменных переменных PHP $ _SESSION htaccess добавить www, если не поддомен, если субдомен удалить www Codeigniter Form Validation – как сбросить значения формы после успеха? Использование функций входа в WordPress PHP при записи в файл, Как добавить и добавить текст в файл с существующим текстом? Нужен PHP-скрипт для распаковки и прокрутки зашифрованного файла symfony: не можем ли мы иметь скрытое поле объекта? Каков самый простой способ отображения нескольких местоположений с использованием API карт Google с MySQL и PHP? WooCommerce – проверьте, находятся ли элементы в корзине Нужно отображать места на карте из базы данных на основе долготы и широты Как настроить Apache / PHP для принятия косой черты в строках запроса? Лучший способ обработки больших XML в PHP Приложение CodeIgniter показывает 404 при переходе на производство Импорт JSON в Mysql PHP отправляет зашифрованные данные по URL-адресу

php пустой или пустой?

У меня есть странный вопрос относительно PHP и NULL , см. Следующий код:

$a = ''; if($a == NULL) { echo 'is null'; } 

Почему я вижу нулевое значение ? если $a пуст !, это ошибка? Спасибо.

Что вы ищете:

 if($variable === NULL) {...} 

PHP рассматривает NULL , false , 0 и пустую строку как равную.

Как показано в следующей таблице, empty($foo) эквивалентен $foo==null а is_null($foo) имеет ту же функцию от $foo===null . В таблице также показаны некоторые сложные значения для null сравнения. (φ обозначает неинициализированные переменные).

Я никогда не использую функции empty() и is_null() . Использование простого сравнения менее неоднозначно, быстрее и чище.

  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 

check == vs ===

'' == NULL вернет true
0 == NULL вернет true
false == null вернет true

в то время как

'' === NULL вернет false
0 === NULL вернет false
false === NULL вернет false

Нет, это не ошибка. Посмотрите на сравнение Loose с таблицей == (вторая таблица), которая показывает результат сравнения каждого значения в первом столбце со значениями в других столбцах:

  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 или "" даст true.

Вместо этого вы можете использовать is_null [docs] или строгое сравнение (третья таблица).

Это не ошибка, а нормальное поведение PHP. Это происходит потому, что оператор == в PHP не проверяет тип.

 '' == null == 0 == false 

Если вы хотите также проверить, имеют ли значения одинаковый тип, используйте === вместо этого. Чтобы глубоко изучить эту разницу, прочитайте официальную документацию .

Если вы используете == , php обрабатывает пустую строку или массив как null . Чтобы сделать различие между null и empty , используйте === или is_null . Так:

if($a === NULL) или if(is_null($a))