В php 0 обрабатывается как пустой?

Код объяснит больше:

$var = 0; if (!empty($var)){ echo "Its not empty"; } else { echo "Its empty"; } 

Результат возвращает «Пустое». Я думал, что empty () проверяет, уже ли я установил переменную и имею значение внутри. Почему он возвращает «Его пустой»?

Solutions Collecting From Web of "В php 0 обрабатывается как пустой?"

http://php.net/empty

Следующие вещи считаются пустыми:

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

Обратите внимание, что это точно такой же список, что и для принуждения к логическому false . empty – это просто !isset($var) || !$var !isset($var) || !$var . Вместо этого попробуйте isset .

Мне было интересно, почему никто не предложил чрезвычайно удобную таблицу сравнения типов . Он отвечает на каждый вопрос об общих функциях и сравнивает операторы.

Фрагмент:

 Expression | empty() ----------------+-------- $x = ""; | true $x = null | true var $x; | true $x is undefined | true $x = array(); | true $x = false; | true $x = true; | false $x = 1; | false $x = 42; | false $x = 0; | true $x = -1; | false $x = "1"; | false $x = "0"; | true $x = "-1"; | false $x = "php"; | false $x = "true"; | false $x = "false"; | false 

Вдоль других чит-таблиц я всегда держу печатную копию этой таблицы на своем столе, если я не уверен

В случае числовых значений вы должны использовать is_numeric функцию:

 $var = 0; if (is_numeric($var)) { echo "Its not empty"; } else { echo "Its empty"; } 

Я был недавно пойман с моими штанами и на этом. Проблема, с которой мы часто сталкиваемся, – это не заданные переменные – например, элемент формы, который может быть или не быть там, но для многих элементов 0 (или строка '0' которая будет проходить через пост более точно, но все равно будет оценена как «ложь») является законным значением, указанным в выпадающем списке.

сначала используя empty() а затем strlen() – ваше лучшее, если вам это нужно, а именно:

 if(!empty($var) && strlen($var)){ echo '"$var" is present and has a non-falsey value!'; } 

Вместо этого используйте strlen() . Я столкнулся с той же проблемой, используя 1/0 как возможные значения для некоторых переменных. Я использую if (strlen($_POST['myValue']) == 0) чтобы проверить, есть ли символ или нет в моей переменной.

С лингвистической точки зрения пустое имеет значение без значения . Как и другие, вы должны использовать isset (), чтобы проверить, определена ли переменная, что вы делаете.

empty() возвращает true для всего, что оценивается как FALSE , на самом деле это «не» ( ! ) в маскировке. Я думаю, вы имели в виду isset()

Из руководства: Возвращает FALSE, если var имеет непустое и ненулевое значение.

Следующие вещи считаются пустыми:

  • "" (пустая строка)
  • 0 (0 как целое число)
  • «0» (0 в виде строки) NULL
  • FALSE array () (пустой массив) var
  • $ Var; (объявленная переменная, но без значения в классе)

Подробнее: http://php.net/manual/en/function.empty.php

 if (empty($var) && $pieces[$var] != '0') { //do something } 

В моем случае этот код работал.

Следующие вещи считаются пустыми:

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

Из руководства PHP

В вашем случае $var равно 0 , поэтому empty($var) вернет true , вы отрицаете результат перед его тестированием, так что блок else будет работать, давая « Its empty » в качестве вывода.

На самом деле isset просто проверьте, не меняется ли переменная или нет. В этом случае, если вы хотите проверить, действительно ли ваша переменная равна нулю или пустое, вы можете использовать этот пример:

 $myVar = ''; if (empty($myVar)) { echo "Its empty"; } echo "<br/>"; if ($myVar===0) { echo "also zero!"; } 

просто для уведомления $ myVar == 0 действует как пустая функция.

Чтобы принять 0 в качестве значения в переменной, используйте isset

Проверьте, нет ли переменной пустой

 $var = 0; if ($var == '') { echo "empty"; } else { echo "not empty"; } //output is empty 

Проверьте, задана ли переменная

 $var = 0; if (isset($var)) { echo "not empty"; } else { echo "empty"; } //output is not empty 

Это работает для меня!

 // if(isset($_POST['post_var'])&&$_POST['post_var']!==''){ echo $_POST['post_var']; } //results: 1 if $_POST['post_var']='1' 0 if $_POST['post_var']='0' skip if $_POST['post_var']='' 

пустое должно означать пустое.

Когда я делаю

 $var = ''; $var = '0'; 

Я ожидаю, что var_dump(empty($var)); вернет false.

если вы проверяете вещи в массиве, вам всегда нужно сначала выполнить isset($var) .