в php, почему empty ("0") возвращает true?

Согласно документации php, следующие выражения возвращают true при вызове empty($var)

  • "" (пустая строка)
  • 0 (0 как целое число)
  • 0.0 (0 в качестве поплавка)
  • «0» (0 в виде строки)
  • НОЛЬ
  • ЛОЖНЫЙ
  • array () (пустой массив)
  • $ Var; (объявленная переменная, но без значения)

Я нашел, как «решить» проблему, используя empty($var) && $var != 0 но почему разработчики php сделали это? я думаю, что это смешно, suppouse у вас есть этот код:

 if (empty($_POST["X"])) { doSomething(); } 

я думаю, что "0" не пуст, пустая – это когда ничего нет !!! возможно, лучше использовать

 if (isset($x) && x != "") {//for strings doSomething(); } 

empty грубые зеркала Выбор PHP значений FALSE-y :

При преобразовании в boolean следующие значения считаются FALSE:

  • сама логическая ЛОЖЬ
  • целое число 0 (ноль)
  • поплавок 0.0 (ноль)
  • пустая строка и строка «0»,
  • массив с нулевыми элементами

Насколько PHP работает таким образом, или почему пустая функция следовала примеру – ну, это Just The Way Is Is.

Рассмотрим использование strlen($x) (это особенно хорошо подходит для таких источников, как $_POST которые являются строковыми значениями), чтобы определить, существует ли непустая строка, включая «0».

Конечная форма, которую я использую, будет тогда: isset($x) && strlen($x) , с любой дополнительной обработкой, используемой, зная, что есть некоторые данные для публикации.