在PHP中,0被视为空?

mys*_*ner 129 php function

代码将解释更多:

$var = 0;

if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}
Run Code Online (Sandbox Code Playgroud)

结果返回"空".我以为empty()会检查我是否已设置变量并且内部有值.为什么它会返回"它的空"?

dec*_*eze 170

http://php.net/empty

以下内容被认为是空的:

  • ""(空字符串)
  • 0(0为整数)
  • "0"(0作为字符串)
  • 空值
  • array()(一个空数组)
  • var $ var; (声明的变量,但在类中没有值)

请注意,这与强制布尔值完全相同false.empty很简单!isset($var) || !$var.试试吧isset.

  • @mysqllearner:如果`$ var = 0`,`isset`返回'True`.但你的意思是`if(isset($ var)&& $ var!= 0)`与`empty`相同 (7认同)
  • 尝试了isset(),结果相同 (2认同)
  • 我认为如果 strlen() > 0,empty() 应该 != true 是相当合乎逻辑的 (2认同)

Dan*_*oap 73

我想知道为什么没有人建议非常方便的Type比较表.它回答有关常用功能的每个问题并比较运算符.

一个片段:

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   
Run Code Online (Sandbox Code Playgroud)

在其他备忘单上,我总是在桌子上保留这张桌子的硬拷贝以防万一我不确定

  • 您应该立即更新备忘单,我将给您更多... 0.0 =正确,0.00 =正确,“ 0.0” =否 (2认同)

Kha*_*azi 32

如果是数值,则应使用is_numeric函数:

$var = 0;

if (is_numeric($var))
{
  echo "Its not empty";
} 
else 
{
    echo "Its empty";
}
Run Code Online (Sandbox Code Playgroud)


小智 12

strlen()改用.我使用1/0作为一些变量的可能值来讨论相同的问题.我if (strlen($_POST['myValue']) == 0)用来测试变量中是否有字符.

  • 如果未设置变量,我相信您会得到一个错误。 (2认同)

Oli*_*ams 10

我最近也抓住了这条裤子.我们经常处理的问题是未设置的变量 - 比如可能存在或不存在的表单元素,但是对于许多元素,0(或者'0'更准确地通过帖子传递的字符串,但仍然会被评估为"falsey") )是下拉列表中的合法值.

如果您需要empty(),那么首先使用然后strlen()是最好的,如:

if(!empty($var) && strlen($var)){
    echo '"$var" is present and has a non-falsey value!';
}
Run Code Online (Sandbox Code Playgroud)


sou*_*rge 6

empty()对于计算为 的所有内容都返回 true FALSE,它实际上是伪装的“not”( !)。我想你的意思是isset()


Elz*_*ugi 6

从一个语言点了的意思是没有价值的.像其他人说的那样,你必须使用isset()它来检查变量是否已定义,这就是你所做的.