/
vshmidt
/
php
Обзор
Документация
Войти
/
vshmidt
/
php
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tests/lang/foreachLoopIteratorAggregate.003.phpt
131 строка
3 KB
Máté Kocsis
Declare tentative return types for Zend (#7251)
19 июл 2021, 14:44
Не верифицирован
19 июл 2021, 14:44
75a678a
Код
Авторство
О чём код?
--TEST-- foreach with nested iteratorAggregates --FILE-- <?php class EnglishMealIterator implements Iterator { private $pos=0; private $myContent=array("breakfast", "dinner", "tea"); public function valid(): bool { global $indent; echo "$indent--> " . __METHOD__ . " ($this->pos)\n"; return $this->pos<3; } public function next(): void { global $indent; echo "$indent--> " . __METHOD__ . " ($this->pos)\n"; $this->myContent[$this->pos++]; } public function rewind(): void { global $indent; echo "$indent--> " . __METHOD__ . " ($this->pos)\n"; $this->pos=0; } public function current(): mixed { global $indent; echo "$indent--> " . __METHOD__ . " ($this->pos)\n"; return $this->myContent[$this->pos]; } public function key(): mixed { global $indent; echo "$indent--> " . __METHOD__ . " ($this->pos)\n"; return "meal " . $this->pos; } } class A1 implements IteratorAggregate { function getIterator(): Traversable { return new EnglishMealIterator; } } class A2 implements IteratorAggregate { function getIterator(): Traversable { return new A1; } } class A3 implements IteratorAggregate { function getIterator(): Traversable { return new A2; } } echo "\n-----( A1: )-----\n"; foreach (new A1 as $k=>$v) { echo "$k => $v\n"; } echo "\n-----( A2: )-----\n"; foreach (new A2 as $k=>$v) { echo "$k => $v\n"; } echo "\n-----( A3: )-----\n"; foreach (new A3 as $k=>$v) { echo "$k => $v\n"; } ?> --EXPECT-- -----( A1: )----- --> EnglishMealIterator::rewind (0) --> EnglishMealIterator::valid (0) --> EnglishMealIterator::current (0) --> EnglishMealIterator::key (0) meal 0 => breakfast --> EnglishMealIterator::next (0) --> EnglishMealIterator::valid (1) --> EnglishMealIterator::current (1) --> EnglishMealIterator::key (1) meal 1 => dinner --> EnglishMealIterator::next (1) --> EnglishMealIterator::valid (2) --> EnglishMealIterator::current (2) --> EnglishMealIterator::key (2) meal 2 => tea --> EnglishMealIterator::next (2) --> EnglishMealIterator::valid (3) -----( A2: )----- --> EnglishMealIterator::rewind (0) --> EnglishMealIterator::valid (0) --> EnglishMealIterator::current (0) --> EnglishMealIterator::key (0) meal 0 => breakfast --> EnglishMealIterator::next (0) --> EnglishMealIterator::valid (1) --> EnglishMealIterator::current (1) --> EnglishMealIterator::key (1) meal 1 => dinner --> EnglishMealIterator::next (1) --> EnglishMealIterator::valid (2) --> EnglishMealIterator::current (2) --> EnglishMealIterator::key (2) meal 2 => tea --> EnglishMealIterator::next (2) --> EnglishMealIterator::valid (3) -----( A3: )----- --> EnglishMealIterator::rewind (0) --> EnglishMealIterator::valid (0) --> EnglishMealIterator::current (0) --> EnglishMealIterator::key (0) meal 0 => breakfast --> EnglishMealIterator::next (0) --> EnglishMealIterator::valid (1) --> EnglishMealIterator::current (1) --> EnglishMealIterator::key (1) meal 1 => dinner --> EnglishMealIterator::next (1) --> EnglishMealIterator::valid (2) --> EnglishMealIterator::current (2) --> EnglishMealIterator::key (2) meal 2 => tea --> EnglishMealIterator::next (2) --> EnglishMealIterator::valid (3)