PHP 的 if ($value) 和 if (!emtpy($value)) 有什么区别?

PHP 的 if ($value)if (!emtpy($value)) 有什么区别?

阅读 4.9k
5 个回答

我是这样理解的,if($value)他只会判断$value隐式转换的bool值,只能判断true或者false。而!empty需要非空非0才会返回true,就是变量存在且值不为""、0、"0"、NULL、、FALSE、array()、var $var; 以及不是没有任何属性的对象。一般情况下他们判断是相等的,但是有些情况是不一样的,比如你这个$value是未定义的,第一个判断会报告一个警告,而!empty不会。

先来看一下定义:
如果 $value 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var;以及没有任何属性的对象都将被认为是空的,如果 $value 为空,则返回 TRUE。
一般情况下差别不大,可以互用,只有一种情况下有区别:
如果$value没有定义,empty不会出错,而!$a会有个警告。

var_dump(empty($value));
var_dump(!$value);  // 会提示 Notice: Undefined variable: value

if (!empty($var)) 的情况:

clipboard.png

以下的东西被认为是空的:

  • "" (空字符串)

  • 0 (作为整数的0)

  • 0.0 (作为浮点数的0)

  • "0" (作为字符串的0)

  • NULL

  • FALSE

  • array() (一个空数组)

  • $var; (一个声明了,但是没有值的变量)

总结:

  1. 有版本区分;

  2. 不会产生警告;

  3. 判空条件;

  4. 等价于 if (!isset($var) || $var == false)

参考:empty

if ($var) 的情况:

此种情况 $var 可能会发生隐式转换,即从其他类型转为 boolean
转换情况如下:
clipboard.png

当然,如果 $var 未定义,从语法角度来说,会有 Notice

参考:Boolean 布尔类型

如果$value没有定义,!$value会报错

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题