empty() returns 如果零浮点值作为字符串传递则为真

empty() returns true if a zero float value was passed as string

MySQL 和 PHP 有时会很烦人,当小数像 MYSQL 函数一样以字符串形式返回时。有没有一个函数可以检查一个变量是否是这些中的任何一个?

null, (bool)false, (int)0, (float)0.00, (string)"", (string)"0", (string)"0.00", or (array)[].

empty() 几乎可以完成这项工作,但落在这些 mysql 有时作为字符串返回的十进制值上。 isset() 和 is_null() 在 PHP 7 和 8 中的运行方式不同。我缺少类似 emptyish() 的东西。

什么不适用于 empty():

if (empty($var)) // Doesn't work for decimal/floats passed as string "0.00"
if (!isset($var) || !$var) // Does not work in PHP 8 for an empty string
if ($var == 0) // Leaves a warning if $var is not declared

此 zero/empty 条件在 PHP 7 和 8 版本中的工作方式相同:

if (empty($var) || (float)$var == 0)

它检查 $var 是否是以下任何一项: 未设置、空、(bool)false、(int)0、(float)0.00、(string)""、(string)"0"、(string)"0.00" 或 (array)[]

并替换为 empty():

function nil(&$var) { // https://www.dictionary.com/browse/nil
  return (empty($var) || (float)$var == 0);
}

像这样使用:

if (nil($var)) {
  echo 'The value is either not set, an empty string, empty array, null, or equals zero.';
}

检查这个isset gettype

Isset 检查 null 而不是空值。通过 gettype 你可以避免类型字符串。

if(isset($var) || gettype($v) !== 'string'){
.
.
.
}

使用 isset()。

<?php
if(isset($var)){
  //$var is set
  if(!$var){
    //$var is 0
  } else if(empty($var)){
    //$var is empty
  } else {
    //code goes here
  }
}else{
  //$var is not set
}