Possible Duplicate:
What's the difference between is_null($var) and ($var === null)?

PHP有两个(据我所知,如果算isset()的话,还有三个)方法来确定一个值是否为null:is_null()=== null.我听说=== null更快,但没有得到证实,但在一次代码审查中,有人强烈建议我使用is_null(),因为它是专门为空计算而设计的.他还开始谈论数学什么的.

不管怎么说,is_null()显然比=== null慢,这一事实也让我相信它比=== null做得更多,而且可能更受欢迎.有什么理由使用其中一种吗?一个总是首选的吗?isset()怎么样?

作为可能不会结束这个问题的补充,isset()is_null()怎么样?看起来isset()可以做的就是取消通知,所以除非您真的为一个未定义的变量指定了want通知,否则有什么理由用is_null()来代替呢?如果您知道变量当时已初始化,情况会怎样呢?

最后,有没有数学上的原因让我们更喜欢is_null()而不是=== null?关于空值不可比较的东西?

推荐答案

is_null=== null在功能上有absolutely no个区别.

唯一的区别是is_null是一个函数,因此

  1. 稍微慢一点(函数调用开销)
  2. 可以用作回调,例如array_map('is_null', $array).

就我个人而言,我尽可能地使用null ===,因为它与false ===true ===支票更一致.

如果您愿意,您可以判断代码:is_identical_function(===)和php_is_type(is_null)对IS_NULL case 执行相同的操作.


在执行null判断之前,相关的isset()语言构造判断变量是否实际存在.所以isset($undefinedVar)不会发出通知.

还要注意,isset()有时可能返回true,即使值是null——这是在重载对象上使用它时的情况,也就是说,如果对象定义了一个offsetExists/__isset方法,即使偏移量是null也返回true(这实际上很常见,因为人们在offsetExists/__isset中使用array_key_exists).

Php相关问答推荐

根据自定义输入字段更新WooCommerce产品价格

用户信息更新期间Laravel邮箱验证问题

尽管包含目标日期,但日期范围比较仍有意外输出

Laravel:从匹配的数组数据中获取记录

MariaDB 11.3.2+PHP:服务器向客户端发送未知的字符集(0).请向开发人员报告

通过DO LAMP进行身份验证并从邮箱发送邮箱的最简单方式是什么

从订单项目中获取ACF WooCommerce产品价值

将下拉 Select 的值从WooCommerce后端保存并显示到前端

如何从WooCommerce checkout 帐单邮箱字段中删除星号?

根据发货类别在WooCommerce产品页面中显示快捷代码

是否有条件判断是否发布了另一个Wordpress页面?

防止 WooCommerce 在前端加载全尺寸图像

在具有Angular 的 Laravel 应用程序中,不显示图像

PHP:数组的等边

在 WooCommerce 我的帐户自定义部分显示未购买的产品

使用现有的htaccess的PHP路由脚本

Laravel 模型将日期保存为空

在 WooCommerce 结帐后更新用户元字段

如果 static:: 被解析为B,为什么 PHP 会执行A的方法

基于其他数组创建多维数组 struct