Annotation of embedaddon/php/tests/classes/iterators_001.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: ZE2 iterators and foreach
                      3: --SKIPIF--
                      4: <?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
                      5: --FILE--
                      6: <?php
                      7: class c_iter implements Iterator {
                      8: 
                      9:        private $obj;
                     10:        private $num = 0;
                     11: 
                     12:        function __construct($obj) {
                     13:                echo __METHOD__ . "\n";
                     14:                $this->num = 0;
                     15:                $this->obj = $obj;
                     16:        }
                     17:        function rewind() {
                     18:        }
                     19:        function valid() {
                     20:                $more = $this->num < $this->obj->max;
                     21:                echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n";
                     22:                return $more;
                     23:        }
                     24:        function current() {
                     25:                echo __METHOD__ . "\n";
                     26:                return $this->num;
                     27:        }
                     28:        function next() {
                     29:                echo __METHOD__ . "\n";
                     30:                $this->num++;
                     31:        }
                     32:        function key() {
                     33:                echo __METHOD__ . "\n";
                     34:                switch($this->num) {
                     35:                        case 0: return "1st";
                     36:                        case 1: return "2nd";
                     37:                        case 2: return "3rd";
                     38:                        default: return "???";
                     39:                }
                     40:        }
                     41: }
                     42:        
                     43: class c implements IteratorAggregate {
                     44: 
                     45:        public $max = 3;
                     46: 
                     47:        function getIterator() {
                     48:                echo __METHOD__ . "\n";
                     49:                return new c_iter($this);
                     50:        }
                     51: }
                     52: 
                     53: echo "===Array===\n";
                     54: 
                     55: $a = array(0,1,2);
                     56: foreach($a as $v) {
                     57:        echo "array:$v\n";
                     58: }
                     59: 
                     60: echo "===Manual===\n";
                     61: $t = new c();
                     62: for ($iter = $t->getIterator(); $iter->valid(); $iter->next()) {
                     63:        echo $iter->current() . "\n";
                     64: }
                     65: 
                     66: echo "===foreach/std===\n";
                     67: foreach($t as $v) {
                     68:        echo "object:$v\n";
                     69: }
                     70: 
                     71: echo "===foreach/rec===\n";
                     72: foreach($t as $v) {
                     73:        foreach($t as $w) {
                     74:                echo "double:$v:$w\n";
                     75:        }
                     76: }
                     77: 
                     78: echo "===foreach/key===\n";
                     79: foreach($t as $i => $v) {
                     80:        echo "object:$i=>$v\n";
                     81: }
                     82: 
                     83: print "Done\n";
                     84: exit(0);
                     85: ?>
                     86: --EXPECT--
                     87: ===Array===
                     88: array:0
                     89: array:1
                     90: array:2
                     91: ===Manual===
                     92: c::getIterator
                     93: c_iter::__construct
                     94: c_iter::valid = true
                     95: c_iter::current
                     96: 0
                     97: c_iter::next
                     98: c_iter::valid = true
                     99: c_iter::current
                    100: 1
                    101: c_iter::next
                    102: c_iter::valid = true
                    103: c_iter::current
                    104: 2
                    105: c_iter::next
                    106: c_iter::valid = false
                    107: ===foreach/std===
                    108: c::getIterator
                    109: c_iter::__construct
                    110: c_iter::valid = true
                    111: c_iter::current
                    112: object:0
                    113: c_iter::next
                    114: c_iter::valid = true
                    115: c_iter::current
                    116: object:1
                    117: c_iter::next
                    118: c_iter::valid = true
                    119: c_iter::current
                    120: object:2
                    121: c_iter::next
                    122: c_iter::valid = false
                    123: ===foreach/rec===
                    124: c::getIterator
                    125: c_iter::__construct
                    126: c_iter::valid = true
                    127: c_iter::current
                    128: c::getIterator
                    129: c_iter::__construct
                    130: c_iter::valid = true
                    131: c_iter::current
                    132: double:0:0
                    133: c_iter::next
                    134: c_iter::valid = true
                    135: c_iter::current
                    136: double:0:1
                    137: c_iter::next
                    138: c_iter::valid = true
                    139: c_iter::current
                    140: double:0:2
                    141: c_iter::next
                    142: c_iter::valid = false
                    143: c_iter::next
                    144: c_iter::valid = true
                    145: c_iter::current
                    146: c::getIterator
                    147: c_iter::__construct
                    148: c_iter::valid = true
                    149: c_iter::current
                    150: double:1:0
                    151: c_iter::next
                    152: c_iter::valid = true
                    153: c_iter::current
                    154: double:1:1
                    155: c_iter::next
                    156: c_iter::valid = true
                    157: c_iter::current
                    158: double:1:2
                    159: c_iter::next
                    160: c_iter::valid = false
                    161: c_iter::next
                    162: c_iter::valid = true
                    163: c_iter::current
                    164: c::getIterator
                    165: c_iter::__construct
                    166: c_iter::valid = true
                    167: c_iter::current
                    168: double:2:0
                    169: c_iter::next
                    170: c_iter::valid = true
                    171: c_iter::current
                    172: double:2:1
                    173: c_iter::next
                    174: c_iter::valid = true
                    175: c_iter::current
                    176: double:2:2
                    177: c_iter::next
                    178: c_iter::valid = false
                    179: c_iter::next
                    180: c_iter::valid = false
                    181: ===foreach/key===
                    182: c::getIterator
                    183: c_iter::__construct
                    184: c_iter::valid = true
                    185: c_iter::current
                    186: c_iter::key
                    187: object:1st=>0
                    188: c_iter::next
                    189: c_iter::valid = true
                    190: c_iter::current
                    191: c_iter::key
                    192: object:2nd=>1
                    193: c_iter::next
                    194: c_iter::valid = true
                    195: c_iter::current
                    196: c_iter::key
                    197: object:3rd=>2
                    198: c_iter::next
                    199: c_iter::valid = false
                    200: Done

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>