php: '0' как строка с пустым ()

Я хочу, чтобы значение 0 считалось целым числом, а «0» считалось строкой, но empty () рассматривает «0» как строку в приведенном ниже примере,

$var = '0'; // Evaluates to true because $var is empty if (empty($var)) { echo '$var is empty'; } 

как я могу «сделать» empty (), чтобы взять «0 в качестве строк?

Благодарю.

Вы не можете это сделать. Так оно и было разработано. Вместо этого вы можете написать инструкцию and инструкцию:

 if (empty($var) && $var !== '0') { echo $var . ' is empty'; } 

Вы можете использовать isset , если, разумеется, вы не хотите, чтобы он удалял другие empty контейнеры, для которых были empty проверки.

редактировать

Исправлена ​​проверка, чтобы сделать проверку типа, а также 2371 за указание на это 🙂

Вы не можете с empty . Из руководства PHP:

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

  • "" (пустая строка)
  • 0 (0 как целое число)
  • «0» (0 в виде строки)
  • НОЛЬ
  • ЛОЖНЫЙ
  • array () (пустой массив)
  • var $ var; (объявленная переменная, но без значения в классе)

Вы должны добавить дополнительную проверку.

Вы можете использовать только empty (). См. Руководство . Вы можете сделать это, хотя:

 if ($var !== '0' && empty($var)) { echo "$var is empty and is not string '0'"; } 

В принципе, empty () делает то же самое, что:

 if (!$var) ... 

Но не вызывает уведомление PHP, когда переменная не задана.

Вы не можете. Из руководства

Возвращает FALSE, если var имеет непустое и ненулевое значение.

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

  • "" (пустая строка)
  • 0 (0 как целое число)
  • «0» (0 в виде строки)
  • НОЛЬ
  • ЛОЖНЫЙ
  • array () (пустой массив)
  • var $ var; (объявленная переменная, но без значения в классе)

В обоих случаях empty() вернет true . Проверьте документ – http://php.net/empty .

Я предлагаю использовать другую функцию, соответствующую вашей спецификации.

empty , безусловно, самая запутанная и бесполезная функция в репертуаре php. Не используйте его.

При проверке значения вы хотите знать три отдельные вещи.

  • значение существует (используйте isset)
  • значение имеет определенный тип (use is_xxx)
  • значение имеет определенные свойства (используйте операторы сравнения, strpos или регулярные выражения).

(последние два могут быть объединены в один с typecasts или '===').

Примеры:

 if(isset($var) && is_string($var) && strlen($var) > 0)... if(isset($var) && intval($var) > 0)... if(isset($var) && $var === '0')... 

Это кажется более подробным, но ясно показывает, что вы делаете. Для структурных объектов часто имеет смысл иметь ярлык, например,

  /// get a string function s($ary, $key, $default = '') { if(!isset($ary[$key])) return $default; $s = trim($ary[$key]); return strlen($s) ? $s : $default; } /// get a natural number function n($ary, $key, $default = 0) { $n = intval(s($ary, $key)); return $n > 0 ? $n : $default; } $name = s($_POST, 'name'); $age = n($_POST, 'age'); 

Я всегда добавляю к своей кодовой базе

 function is_blank($value) { return empty($value) && !is_numeric($value); } 

и используйте его вместо empty (). Он решает проблему сохранения нулей (int, float или string) как непустых.

См. http://www.php.net/manual/en/function.empty.php#103756, который был добавлен в мае 2011 года.

 $var = '0'; // Evaluates to true because $var is empty if (empty($var) && $var !== '0') { echo '$var is empty or the string "0"'; } 

PHP имеет разные функции, которые можно использовать для проверки значения переменной. Три полезные функции для этого: isset (), empty () и is_null (). Все эти функции возвращают логическое значение. Если эти функции не используются корректно, они могут вызвать неожиданные результаты.

isset () и empty () часто рассматриваются как функции, противоположные, однако это не всегда так. В этом посте я объясню различия между этими функциями.

Исеть ()

Из руководства PHP – isset ():

 isset — Determine if a variable is set and is not NULL 

Другими словами, он возвращает true только тогда, когда переменная не равна нулю. пустой ()

Из PHP Manual – empty ():

 empty — Determine whether a variable is empty 

Другими словами, он вернет true, если переменная является пустой строкой, false, array (), NULL, «0 ?, 0» и неустановленной переменной. нулевой()

Из руководства PHP – is_null ():

 is_null — Finds whether a variable is NULL 

Другими словами, он возвращает true только тогда, когда переменная имеет значение null. is_null () противоположно isset (), за исключением одной разницы, которую isset () может применяться к неизвестным переменным, но is_null () только для объявленных переменных.

Таблица на картинке является простой ссылкой на то, что эти функции вернутся для разных значений. Пустое пространство означает, что функция возвращает bool (false). введите описание изображения здесь

Также я сделал пользовательскую функцию для проверки всех вещей.

 function checkEmpty($var, $term = ""){ if(isset($var) && trim($var) != "" && (!empty($var) || trim($var) == 0)){ return true; } else{ if($term != ""){ return array("status" => "error", "desc" => "$term can not be empty"); } else{ return array("status" => "error", "desc" => "value can not be empty"); } } } 

В этом случае не используйте пустой, используйте isset () вместо него. Это также позволит 0 как целое число.

 $var = '0'; if (!isset($var)) { print '$var is not set'; } $var = 0; if (!isset($var)) { print '$var is not set'; } 

Ничего не должно печатать.

Вы не можете, потому что integer, string, float, null не имеет значения для PHP.

Потому что это круто 🙂

Вы должны проверить характерные особенности вашей переменной is_numeric, isset, ===, strlen и т. Д.

Например:

 if (strlen(@$var)==0) { echo @$var . ' is empty'; } 

или

 if (@$var==="" || !isset($var)) { echo @$var . ' is empty'; } 

или другие примеры 🙂

Спасибо за прочтение.

Если вы хотите пропустить пустой фильтр $ и не пропускать $ filter = '0' и другие значения

 $filter = ''; //or $filter = '0'; or $filter = '1'; //trim the $filter if( isset($filter) and ( $filter != '' or $filter == '0') ) { //$filter data }; 

if ( (is_array($var) && empty($var)) || strlen($var) === 0 ) { echo $var . ' is empty'; }