Позвольте объекту зацикливаться как массиву с помощью foreach(), расширяя ArrayObject


Итак, у меня есть объект, который содержит набор объектов в частном элементе данных. Теперь я могу зациклить его с помощью цикла for, переопределив функцию count() ArrayObject и offsetGet($index), но я также хочу зациклить его в цикле foreach.

Какие функции мне нужно минимально расширить, чтобы добавить эту функциональность?

Author: shadyyx, 2012-06-15

2 answers

Используйте интерфейс итератора SPL, см. http://uk.php.net/manual/en/class.iterator.php подробнее

 3
Author: Rufinus, 2012-06-15 12:14:02

AFAIK Вы можете использовать напрямую foreach на ArrayObject:

$ao = new ArrayObject(array(1, 2, 3, 4));
$res = 0;
foreach($ao as $el) {
    $res += $el;
}
echo 'ArrayObject elements sum: '.$res;

ОБРАЗЕЦ: http://codepad.org/uQDGQ03A

 2
Author: shadyyx, 2012-06-15 12:17:24