Код объяснит больше:
$var = 0; if (!empty($var)){ echo "Its not empty"; } else { echo "Its empty"; }
Результат возвращает «Пустое». Я думал, что 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 имеет непустое и ненулевое значение.
Следующие вещи считаются пустыми:
Подробнее: http://php.net/manual/en/function.empty.php
if (empty($var) && $pieces[$var] != '0') { //do something }
В моем случае этот код работал.
Следующие вещи считаются пустыми:
Из руководства 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)
.