123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- --TEST--
- ZE2 iterators and break
- --FILE--
- <?php
- class c_iter implements Iterator {
- private $obj;
- private $num = 0;
- function __construct($obj) {
- echo __METHOD__ . "\n";
- $this->obj = $obj;
- }
- function rewind(): void {
- echo __METHOD__ . "\n";
- $this->num = 0;
- }
- function valid(): bool {
- $more = $this->num < $this->obj->max;
- echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n";
- return $more;
- }
- function current(): mixed {
- echo __METHOD__ . "\n";
- return $this->num;
- }
- function next(): void {
- echo __METHOD__ . "\n";
- $this->num++;
- }
- function key(): mixed {
- echo __METHOD__ . "\n";
- switch($this->num) {
- case 0: return "1st";
- case 1: return "2nd";
- case 2: return "3rd";
- default: return "???";
- }
- }
- function __destruct() {
- echo __METHOD__ . "\n";
- }
- }
- class c implements IteratorAggregate {
- public $max = 3;
- function getIterator(): Traversable {
- echo __METHOD__ . "\n";
- return new c_iter($this);
- }
- function __destruct() {
- echo __METHOD__ . "\n";
- }
- }
- $t = new c();
- foreach($t as $k => $v) {
- foreach($t as $w) {
- echo "double:$v:$w\n";
- break;
- }
- }
- unset($t);
- print "Done\n";
- ?>
- --EXPECT--
- c::getIterator
- c_iter::__construct
- c_iter::rewind
- c_iter::valid = true
- c_iter::current
- c_iter::key
- c::getIterator
- c_iter::__construct
- c_iter::rewind
- c_iter::valid = true
- c_iter::current
- double:0:0
- c_iter::__destruct
- c_iter::next
- c_iter::valid = true
- c_iter::current
- c_iter::key
- c::getIterator
- c_iter::__construct
- c_iter::rewind
- c_iter::valid = true
- c_iter::current
- double:1:0
- c_iter::__destruct
- c_iter::next
- c_iter::valid = true
- c_iter::current
- c_iter::key
- c::getIterator
- c_iter::__construct
- c_iter::rewind
- c_iter::valid = true
- c_iter::current
- double:2:0
- c_iter::__destruct
- c_iter::next
- c_iter::valid = false
- c_iter::__destruct
- c::__destruct
- Done
|