Код объяснит больше:
$var = 0;
if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}
Результат возвращает «Пусто». Я думал, что empty () проверит, установил ли я уже переменную и имею ли значение внутри. Почему он возвращает "Пусто" ??
empty
, пожалуй, самая полезная, но неправильно понимаемая функция PHP. Узнайте, как и когда его использовать.empty
- это сокращение отisset($var) && $var != false
. Вы, должно быть, держитесьempty
очень странно, чтобы выстрелить себе в ногу этим. ; Pfalse
ошибкой «неопределенная переменная» без появления ошибки? Что ж, думаю, вы никогда этого не сделаете ... 3) Выбор неправильной функции в контексте безопасности не означает, что сама функция плохая, бесполезная или несовместимая; это просто означает, что кто-то выбрал неправильную функцию для работы.empty()
, то, вероятно, у нее неправильное имя.Ответы:
http://php.net/empty
Обратите внимание, что это точно такой же список, что и для приведения к логическому типу
false
.empty
просто!isset($var) || !$var
. Попробуйтеisset
вместо этого.источник
!empty($var)
, но обратите внимание, что это не то же самое, что вы написали в вопросе. Что использовать, полностью зависит от того, какие ценности вы хотите рассматриватьtrue
. Просто сравните различия междуisset
иempty
и выберите правильную комбинацию для правильной ситуации.isset
возвращает,True
если$var=0
. Но то, что вы имеете в виду,if(isset($var) && $var != 0)
то же самое, что иempty
'0'
он рассматривается как эквивалент0
. Это основная философия дизайна PHP. Я согласен с тем, что это крайне спорный выбор, однако я здесь не для того, чтобы обсуждать этот выбор с вами. В логике PHP,empty
как эквивалент== false
минусовых уведомлений, это нормально, IMO. То, что некоторые вещи в PHP должны быть совсем другими, чем они есть, - это отдельная тема.Мне было интересно, почему никто не предложил чрезвычайно удобную таблицу сравнения типов . Он отвечает на все вопросы об общих функциях и операторах сравнения.
Фрагмент:
Expression | empty($x) ----------------+-------- $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"; }
источник
strlen()
Вместо этого используйте . Я столкнулся с той же проблемой, используя 1/0 в качестве возможных значений для некоторых переменных. Я использую,if (strlen($_POST['myValue']) == 0)
чтобы проверить, есть ли символ в моей переменной.источник
@strlen
. Пока вы передаете переменную, она не должна выводить ошибку. Если ваш strlen пуст, он запишет значение как 0.Меня недавно поймали со спущенными штанами и на этом. Проблема, с которой мы часто сталкиваемся, - это неустановленные переменные - скажем, элемент формы, который мог быть или не был там, но для многих элементов
0
(или строка,'0'
которая будет проходить через сообщение более точно, но все равно будет оценена как "ложная" ) является допустимым значением, например, в раскрывающемся списке.Если вам это нужно, лучше всего использовать
empty()
сначала, а затемstrlen()
:if(!empty($var) && strlen($var)){ echo '"$var" is present and has a non-falsey value!'; }
источник
С лингвистической точки зрения « пустое » означает « не имеющее ценности» . Как и другие говорили, вам придется использовать
isset()
, чтобы проверить, была ли определена переменная, что вы делаете.источник
0
противnull
проблемы с легкостью. Благодарность!empty()
возвращает true для всего, что оцениваетсяFALSE
, на самом деле это!
замаскированный not ( ). Я думаю ты имел ввидуisset()
источник
Чтобы принять 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']=''
источник
Пустыми считаются следующие вещи:
Из руководства по PHP
В вашем случае
$var
это0
, такempty($var)
вернетсяtrue
, вы отрицая результат перед тестированием, так что еще блок будет работать давая «Its empty
» в качестве выходного сигнала.источник
Из руководства: возвращает FALSE, если var имеет непустое и ненулевое значение.
Пустыми считаются следующие вещи:
Подробнее: http://php.net/manual/en/function.empty.php
источник
if (empty($var) && $pieces[$var] != '0') { //do something }
В моем случае этот код работал.
источник
На самом деле isset просто проверяет, установлена ли переменная или нет. В этом случае, если вы хотите проверить, действительно ли ваша переменная равна нулю или пуста, вы можете использовать этот пример:
$myVar = ''; if (empty($myVar)) { echo "Its empty"; } echo "<br/>"; if ($myVar===0) { echo "also zero!"; }
просто для заметки $ myVar == 0 действует как пустая функция.
источник
пустой должен означать пустой .. что бы ни сказал обман.
Когда я делаю
$var = ''; $var = '0';
Я ожидаю, что
var_dump(empty($var));
вернется false.если вы проверяете что-то в массиве, вам всегда нужно делать это в
isset($var)
первую очередь.источник
использовать только
($_POST['input_field_name'])!=0
вместо!($_POST['input_field_name'])==0
0 не считается пустым.источник
Не уверен, что еще есть люди, которые ищут объяснение и решение. Приведенные выше комментарии говорят о различиях между TRUE / FALSE / 1/0.
Я просто хотел бы принести свои 2 цента за способ отображения фактического значения.
BOOLEAN
Если вы работаете с логическим типом данных, вам нужен результат ИСТИНА или ЛОЖЬ; если вы сохраните его в MySQL, он будет сохранен как 1 соотв. 0 (если не ошибаюсь, в памяти вашего сервера то же самое).
Итак, чтобы отобразить значение в PHP, вам нужно проверить, истинно ли оно (1) или ложно (0), и отобразить все, что вы хотите: «ИСТИНА» или «ЛОЖЬ» или, возможно, «1» или «0».
Внимание, все, что больше (или отличается) от 0, также будет считаться ИСТИННЫМ в PHP. Например: 2, «abc» и т. Д. Вернут ИСТИНА.
БИТ, ТИНИИНТ
Если вы работаете с числовым типом данных, способ его хранения такой же.
Чтобы отобразить значение, вам нужно указать PHP, чтобы он обрабатывал его как число. Самый простой способ, который я нашел, - это умножить его на 1.
источник
правильный пример. просто создайте поле типа int (например, номер мобильного телефона) в базе данных и отправьте пустое значение для следующей базы данных через форму или просто вставьте с помощью SQL. что он будет сохранен в базе данных 0, потому что это тип int и не может быть сохранен как пустой или пустой. поэтому он пуст, но будет сохранен как 0. Поэтому, когда вы извлекаете данные через PHP и проверяете пустые значения. это очень полезно и логически правильно.
0.00, 0.000, 0.0000 .... 0.0 ... 0 также пусто, и приведенный выше пример также можно использовать для хранения различных типов значений в базе данных, таких как float, double, decimal (десятичные числа имеют разные варианты, такие как 0.000 и т. Д.).
источник
Вам нужно использовать isset (), чтобы проверить, установлено ли значение.
источник