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


код объясню подробнее:

$var = 0;

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

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

15 91

15 ответов:

http://php.net/empty

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

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

обратите внимание, что это точно такой же список, как и для приведения к Boolean false. empty просто !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   

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

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

$var = 0;

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

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

используя 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 (), чтобы проверить, определена ли переменная, что вы и делаете.

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

//
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']=''

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

чтобы принять 0 в качестве значения в переменной use 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

от ручного: Возвращает 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 как строка)
  • NULL
  • ложные
  • array () (пустой массив)
  • var $var; (переменная объявлена, но без значения в классе)

С руководство PHP

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

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

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

if ($myVar===0)
{
  echo "also zero!";
}

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

пустые-значит пустые .. независимо от deceze говорит.

когда я делаю

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

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

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

использовать только ($_POST['input_field_name'])!=0 вместо !($_POST['input_field_name'])==0 тогда 0 не считается пустым.