Использование usort () с объектом, который реализует ArrayIterator - PullRequest
1 голос
/ 09 июня 2011

У меня есть этот класс:

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

У меня проблема с использованием usort () и передачей моего объекта в качестве первого параметра. usort () ожидает массив вместо объекта, но, учитывая мою реализацию интерфейса ArrayAccess, я не знаю, что еще может понадобиться.

Точная ошибка, возвращаемая php: Warning: usort() expects parameter 1 to be array, object given.

Ответы [ 2 ]

0 голосов
/ 09 июня 2011

Как usort узнает, как вы реализовали ArrayAccess? Там нет определенного места, где хранятся значения - эта гибкость - весь смысл интерфейса.

Если вы храните элементы в массиве, который является частным членом объекта, вы можете использовать прокси для операции usort. Например:

public function usort($callback) {
    usort($this->container, $callback);
}
0 голосов
/ 09 июня 2011

Если память служит, на странице ArrayAccess или в одном из комментариев к ней есть большой предупреждающий знак (возможно, последний, фактически).В основном это говорит что-то в следующем порядке: интерфейс несколько бесполезен, потому что функции массива PHP не распознают ни одного из своих элементов как массивы.

...