Не могли бы вы помочь мне улучшить мой стиль кодирования? В некоторых задачах мне нужно проверять, переменная пуста или что-то содержит. Для решения этой задачи я обычно делаю следующее.
Проверяю, задана эта переменная или нет? Если установлена - проверяю, пустая или нет?
<?php
$var = '23';
if (isset($var)&&!empty($var)){
echo 'не пустая';
}else{
echo 'не установлена или пуста ';
}
?>
Ответ 1
Это зависит от того, что вам надо: если вы просто хотите узнать, пуста ли переменная, тогда просто используйте empty, так как функция проверяет, установлена ли переменная. Если вы хотите знать, установлено ли что-то или нет, используйте isset.
Empty проверяет, установлена ли переменная, и если да, то проверяет ее на null, "", 0 и т. д.
Isset просто проверяет, установлена ли переменная; это может быть что угодно, только не null.
С помощью empty следующие вещи считаются пустыми:
"" (пустая строка)
0 (0 как целое число)
0.0 (0 как плавающая величина)
"0" (0 как строка)
NULL
FALSE
array() (пустой массив)
var $var; (переменная, объявленная, но не имеющая значения в классе)
См. в документации по ссылке:
http://php.net/manual/en/function.empty.php
В руководстве PHP сказано:
empty() является противоположностью (boolean) var, за исключением того, что не выдается предупреждение, когда переменная не установлена.
Что касается isset. В руководстве PHP говорится, что:
isset() вернет FALSE при проверке переменной, которая была установлена в NULL.
Ваш код будет выглядеть следующим образом:
<?php
$var = '23';
if (!empty($var)){
echo 'не пустая';
}else{
echo 'не установлена или пустая';
}
?>
Для примера:
$var = "";
if(empty($var)) // истина, потому что "" считается пустым
{...}
if(isset($var)) //истина, потому что var установлен
{...}
if(empty($otherVar)) //истина, потому что $otherVar равен null
{...}
if(isset($otherVar)) //false, потому что $otherVar не установлен
{...}
Ответ 2
В вашем конкретном случае: if ($var). Вам нужно использовать isset, если вы не знаете, существует переменная или нет. Поскольку вы объявили ее в самой первой строке, вы знаете, что она существует, следовательно, вам не нужно, а точнее, не следует использовать isset. То же самое относится и к empty, только в empty также сочетается проверка истинности значения. empty эквивалентен !isset($var) || !$var, и !empty эквивалентен isset($var) && $var, или isset($var) && $var == true. Если вы хотите проверить на истинность только переменную, которая должна существовать, то if ($var) вполне адекватен и понятен.
Ответ 3
Вот результаты работы isset() и empty() для 4 возможностей: undeclared, null, false и true.
$a=null;
$b=false;
$c=true;
var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 ранее была необъявлена
var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 ранее не была объявлена
//array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) }
//array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) }
Вы заметите, что все результаты 'isset' противоположны результатам 'empty', за исключением случая $b=false. Все значения (кроме null, который является не значением, а не-значением), которые оцениваются как false, возвращают true при проверке isset и false при проверке empty. Поэтому используйте isset(), если вас интересует существование переменной. И используйте empty, когда вы проверяете истинность или ложность. Если фактический тип пустоты имеет значение, используйте is_null и «===0», «=== false», «===''».
Ответ 4Вы можете просто использовать empty(). Как видно из документации, она вернет false, если переменная не имеет значения. Пример:
<?php
$var = 0;
// Вычисляет true, потому что $var пуст.
if (empty($var)) {
echo '$var либо равен 0, либо пуст, либо вообще не задан ';
}
// Оценивается как true, потому что $var установлен
if (isset($var)) {
echo '$var устанавливается, даже если он пуст ';
}
?>
Web