为了账号安全,请及时绑定邮箱和手机立即绑定

php判断一个数组为空if(!array())好,还是if(empty(array()))?

php判断一个数组为空if(!array())好,还是if(empty(array()))?

慕田峪4524236 2019-02-04 10:06:45
php判断一个数组为空if(!array())好,还是if(empty(array()))?
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

首先习惯性地,RTFM

没有好不好,只有合适不合适

!empty()行为有什么区别?

他们的行为有3个差异

  1. 空SimpleXML (经过实验,发现这是文档问题,php5.1后,两者行为是一致的)

  2. 未定义的变量 (!$undefined会产生error,empty($undefined)则返回true) 和isset类似,这个特性对于访问复杂结构的数组或对象成员的时候特别友好(empty($arr['userModel']->userFriends)

  3. php5.5之前,empty只接受变量,不接受表达式(比如函数的返回结果empty(getSomething())

评论里也有人说了,因为empty是语言结构,并没有函数调用的巨大开销,所以两者的性能的差异不会太大,另外现代PHP对于这种小的开销也已经优化地很好了,所以这里不怎么需要考虑性能。结合上面的分析来说,empty是优于!的,除非你的php版本比较老,而又需要对表达式直接判断,不希望多加一个变量

但是,如果你并不知道你手里的东西是不是数组,建议参考 @dreamans 的答案,考虑$arr并非数组的场景做合适的处理。

因为is_array并不具有empty的耐受未定义的特性,我推荐这种写法empty($arr) && is_array($arr)
能够严谨地支持各种场景

if(empty($undefined) && is_array($undefined));//未定义变量if(empty($arr['userModel']->userFriends) && is_array($arr['userModel']->userFriends));//(潜在)未定义成员//或者反向场景,判断有内容数组,结合表达式的能力if(!empty($things = getSomething()) && is_array($things));

当然,更好的风格是用typehinting代替is_array,一定是array且一定定义过,情况好得多


关于官方手册中empty行为描述的不完整,已经补充评论了,各位有空帮忙upvote


查看完整回答
反对 回复 2019-03-16
?
HUWWW

TA贡献1874条经验 获得超12个赞

写代码要严谨:

if(is_array($arr) && !$arr) { 
    do something
}


查看完整回答
反对 回复 2019-03-16
?
开满天机

TA贡献1786条经验 获得超13个赞

if (count($arr)) {    // 数组不为空}


查看完整回答
反对 回复 2019-03-16
  • 3 回答
  • 0 关注
  • 1549 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号