将usort()与实现ArrayTerator的对象一起使用


Using usort() with an object that implements ArrayIterator

我有这个类:

class ResultSet 
    implements ArrayAccess, Countable, Iterator {
     /// Rest of implementation ...
}

我在使用usort()并将我的对象作为第一个参数传递时遇到了一个问题。usort()需要一个数组而不是一个对象,但考虑到我对ArrayAccess接口的实现,我不知道它还需要什么。

php返回的确切错误为:CCD_ 2。

usort如何知道您是如何实现ArrayAccess的?没有定义保存值的地方——灵活性是接口的全部意义。

如果将元素存储在对象的私有成员数组中,则可以代理usort操作。例如:

public function usort($callback) {
    usort($this->container, $callback);
}

如果内存可用,则在ArrayAccess页面上或其中一条注释中(实际上可能是后者)会有一个大警告标志。它基本上按照以下顺序说明:接口有些无用,因为PHP的数组函数不将其任何成员识别为数组。