两个getInvoiceItemsByType函数是否存在差异?求具体区别解析
两个PHP
getInvoiceItemsByType 函数的差异解析 这两个函数的差异其实非常直观,咱们拆开细节说:
第一个函数(使用filter方法)
public function getInvoiceItemsByType($type) { return $this->invoiceItems->filter(function ($invoice) use ($type) { /** @var InvoiceItem $invoice */ return $invoice->getType() == $type; } ); }
- 它会完整遍历
$this->invoiceItems中的所有元素,把所有匹配$type的InvoiceItem对象筛选出来,返回一个包含这些对象的集合/数组(具体类型取决于$invoiceItems是Laravel Collection还是普通PHP数组) - 不管有多少个匹配项,都会全部保留,不会提前终止遍历
- 永远不会返回
null,哪怕没有匹配项,也会返回一个空的集合/空数组
第二个函数(使用foreach循环)
public function getInvoiceItemsByType($type) { foreach ($this->invoiceItems as $invoice) { if ($invoice->getType() == $type) { return $invoice; } } return null; }
- 它会遍历
$this->invoiceItems,找到第一个匹配$type的对象就立刻返回,不会继续检查剩下的元素 - 如果遍历完所有元素都没有找到匹配项,才会返回
null - 最多只会返回一个匹配的
InvoiceItem对象,或者null
举个实际场景例子:假设$invoiceItems里有3个类型为'product'的项,第一个函数会返回包含这3个项的集合,而第二个函数只会返回第一个遇到的'product'类型的项。
内容的提问来源于stack exchange,提问作者j.y
相关产品推荐
相关产品推荐

