法师 nto 系列的一个相当未知的功能是您实际上不知道’t have to call ->在可以访问申博娱乐中的项目之前,先对申博娱乐进行load()。因此,您可以执行以下操作:
1 2 3 4 5 6 |
$ 订单 = 法师 :: getResourceModel('sales / 订购 _collection')-& gt ;addAttributeToSelect( '*' ); #不需要load方法,因为如果尚未加载,则遍历申博娱乐将自动对其进行加载。 #$ 订单 ->load(); 前言 ($ 订单 如 $ 订购 ){ 回声 “订单ID:” . $ 订购 -& gt ; getId () . “ \ n” ; } |
Varien_Data_Collection基类实现了IteratorAggregate(http://php.net/manual/en/class.iteratoraggregate.php)接口,扩展了Traversable(http://www.php.net/manual/en/class.traversable.php)界面。当类扩展Traversable接口时,它保证可以通过使用foreach()来迭代该类。在申博娱乐上调用foreach时,它将调用Varien_Data_Collection类中的getIterator()方法,并将从该方法返回的值用作foreach进行迭代的值。这是getIterator()方法:
1 2 3 4 5 |
上市 功能 getIterator () { $ 这个 -& gt ; 加载 (); 返回 新 ArrayIterator($ 这个 -& gt ; _项 ); } |
此自动加载功能适用于EAV和平板电脑申博娱乐。
如您所见,申博娱乐确保在运行for每个循环之前先加载该申博娱乐。注意:申博娱乐只能在每个实例中加载一次。如果要重新加载申博娱乐,则必须调用clear()方法,然后在再次调用load()方法之前重置select和filter。
了解了申博娱乐函数的这种方式后,您可以编写代码,而无需显式调用load()。最终这将导致更灵活的代码。您可以在加载申博娱乐的块中有一个方法。然后,可以通过模板文件调用该申博娱乐并进行迭代,也可以使用另一个方法从第一个方法加载该申博娱乐,然后向其添加其他选择/过滤器。这种不显式调用load()的做法会导致代码更加灵活和可重用。
1 评论
很好的解释
谢谢