猿问

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

我继承了Laravel项目,现在仍在学习中。我在代码中看到只有在$patient->records存在块的情况下才检查运行块,但检查是否为:

if(! empty($patient->records) && $patient->records->count() > 0)

是多余的还是为空,并且count()检查2个单独的东西?

编辑:从改正> 1> 0


大话西游666
浏览 149回答 3
3回答

qq_花开花谢_0

我认为这是多余的。$ Patient-> records是一个集合。我这样使用。if($patient->records->count()) {// has records}

宝慕林4294392

如果可能无法定义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方法结果的更具体的检查。在$病人或记录未定义的情况下,该方法不可用。

慕尼黑的夜晚无繁华

是的,这是多余的。那么,为什么有人可以用这种方式编写代码?可能是,在检查集合的长度之前,他想确保它不是,null尽管在这种情况下我不喜欢使用is_null()orisset()方法。即使他脑子里有(一点都不安全)的想法,还是没有必要的。因为如果之间的关系patient和records正确定义(一对多=> hasMany()),那么$patient->records总是会返回一个集合但不能为null。即使它是一个空集合,您仍然可以count()安全地使用方法,而无需检查as是否records为null,因为如果我们返回一个hasMany()关系,它永远不会为null 。有什么更好的解决方案您可以使用相同的条件删除空的检查部分,如下所示:if($patient->records->count() > 0)为了使它更具可读性,Laravel集合为我们提供了一个非常好的方法,称为isNotEmpty():if($patient->records->isNotEmpty())这是我更喜欢使用的。因为我们编写代码是为了使其他程序员(而非计算机)可以读取。计算机甚至可以理解二进制,但我们不会编写二进制。
随时随地看视频慕课网APP
我要回答