Почему класс, который реализует ArrayAccess, Iterator и Countable, не работает с array_filter()?

У меня есть следующий класс:

<!--?php
/*
* Abstract class that, when subclassed, allows an instance to be used as an array.
* Interfaces `Countable` and `Iterator` are necessary for functionality such as `foreach`
*/
abstract class AArray implements ArrayAccess, Iterator, Countable
{
 private $container = array();
 public function offsetSet($offset, $value) 
 {
 if (is_null($offset)) {
 $this--->container[] = $value;
 } else {
 $this->container[$offset] = $value;
 }
 }
 public function offsetExists($offset) 
 {
 return isset($this->container[$offset]);
 }
 public function offsetUnset($offset) 
 {
 unset($this->container[$offset]);
 }
 public function offsetGet($offset) 
 {
 return isset($this->container[$offset]) ? $this->container[$offset] : null;
 }
 public function rewind() {
 reset($this->container);
 }
 public function current() {
 return current($this->container);
 }
 public function key() {
 return key($this->container);
 }
 public function next() {
 return next($this->container);
 }
 public function valid() {
 return $this->current() !== false;
 } 
 public function count() {
 return count($this->container);
 }
}
?>

Затем у меня есть еще один класс, который подклассы AArray:

Когда я заполняю экземпляр GalleryCollection данными и затем пытаюсь использовать его в array_filter(), в первом аргументе я получаю следующую ошибку:

Warning: array_filter() [function.array-filter]: The first argument should be an array in

Спасибо!

1 ответ

Потому что array_filter работает только с массивами.

Посмотрите другие параметры, например FilterIterator или сначала создайте массив из своего объекта.

licensed under cc by-sa 3.0 with attribution.