使用 PHP 的 ArrayObject 实现模型对象的集合


Using PHP's ArrayObject to implement a collection of model objects

我正在为我的开源项目开发一个"胖模型",我正在研究位于ORM(RedBeanPHP)和控制器之间的层。

我将有一个User类,可能还有一个UserFactory/UserMapper类,可以构造User对象,以及执行usernameExists等元操作。

许多其他 SO 问题/博客文章指出,如果我需要检索User对象的集合,让我的 UserMapper 类遍历结果集并构建 nUser对象将是低效的。

我的想法是创建一个实现PHP ArrayObject类的UserCollection类。 UserMapper将能够创建一个UserCollection,将原始结果集作为多维数组在内部存储。 然后,我可以实现ArrayObject的迭代器函数,[]等,以按需构造相应的User对象。

这是一种聪明的方法吗? 在采用这种方法之前,我需要考虑什么?

要呈现大型数据列表,使用每行一个实例实际上会更慢。这就是蝇量级模式派上用场的地方......http://sourcemaking.com/design_patterns/Flyweight/php

看起来这正是Laravel的ORM,Eloquent的做法:

class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable {
...
public function fetch($key)
{
return new static(array_fetch($this->items, $key));
}
}

如果最流行的PHP框架是这样做的,我会说这是一个很好的认可。