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

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

我正在为我的 open-source project 开发一个 "fat model",我正在处理位于 ORM (RedBeanPHP) 和控制器之间的层。

我会有一个 User class,可能还有一个 UserFactory/UserMapper class 可以构造 User 对象,因为以及执行 usernameExists 等元操作

许多其他 SO questions/blog 帖子指出,如果我需要检索 集合 User 对象,则效率低下让我的 UserMapper class 遍历结果集并构建 n User 对象。

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

这样做明智吗?在采用这种方法之前我需要考虑什么?

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

看起来 this is exactly how Laravel's ORM, Eloquent, does it:

class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable {

...

public function fetch($key)
{
return new static(array_fetch($this->items, $key));
}

}

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