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

PHP:冗余检查是否为空数组/集合?

PHP:冗余检查是否为空数组/集合?

PHP
大话西游666 2021-04-26 17:30:58
我继承了Laravel项目,现在仍在学习中。我在代码中看到只有在$patient->records存在块的情况下才检查运行块,但检查是否为:if(! empty($patient->records) && $patient->records->count() > 0)是多余的还是为空,并且count()检查2个单独的东西?编辑:从改正> 1为> 0
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

我认为这是多余的。$ Patient-> records是一个集合。我这样使用。


if($patient->records->count()) 

{

// has records

}


查看完整回答
反对 回复 2021-05-14
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

如果可能无法定义empty($patient->records)$ Patient或记录(假定为$ Patient的属性),则这很有用,因为$ Patient-> records-> count()本身会导致致命错误: Uncaught Error: Call to a member function count() on null in ...

随着empty($patient->records)在if语句,可避免致命的错误,甚至在情况$患者或记录是不明确的。

空值表示检查$ Patient-> records是否已定义,而不是空值,而子句的count()部分是对count方法结果的更具体的检查。在$病人或记录未定义的情况下,该方法不可用。


查看完整回答
反对 回复 2021-05-14
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

是的,这是多余的。

那么,为什么有人可以用这种方式编写代码?

可能是,在检查集合的长度之前,他想确保它不是,null尽管在这种情况下我不喜欢使用is_null()orisset()方法。即使他脑子里有(一点都不安全)的想法,还是没有必要的。因为如果之间的关系patientrecords正确定义(一对多=> hasMany()),那么$patient->records总是会返回一个集合但不能为null。即使它是一个空集合,您仍然可以count()安全地使用方法,而无需检查as是否records为null,因为如果我们返回一个hasMany()关系,它永远不会为null 。

有什么更好的解决方案

您可以使用相同的条件删除空的检查部分,如下所示:

if($patient->records->count() > 0)

为了使它更具可读性,Laravel集合为我们提供了一个非常好的方法,称为isNotEmpty()

if($patient->records->isNotEmpty())

这是我更喜欢使用的。因为我们编写代码是为了使其他程序员(而非计算机)可以读取。计算机甚至可以理解二进制,但我们不会编写二进制。


查看完整回答
反对 回复 2021-05-14
  • 3 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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