В php 0 рассматривается как пустой?
код объясню подробнее:
$var = 0;
if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}
результат возвращает "пустое". Я думал, что empty () проверит, если я уже установил переменную и имею значение внутри. Почему он возвращает "его пустой"??
15 ответов:
пустыми считаются следующие вещи:
- "" (пустая строка)
- 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']=''
чтобы принять 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; (переменная объявлена, но без значения в классе)
пустыми считаются следующие вещи:
- "" (пустая строка)
- 0 (0 как целое число)
- " 0 "(0 как строка)
- NULL
- ложные
- array () (пустой массив)
- var $var; (переменная объявлена, но без значения в классе)
в вашем случае
$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 действуйте как пустая функция.