Annotation of embedaddon/php/tests/classes/array_access_010.phpt, revision 1.1.1.2

1.1       misho       1: --TEST--
                      2: ZE2 ArrayAccess and ArrayReferenceProxy with references
                      3: --FILE--
                      4: <?php 
                      5: 
                      6: // NOTE: This will become part of SPL
                      7: 
                      8: class ArrayReferenceProxy implements ArrayAccess
                      9: {
                     10:        private $object;
                     11:        private $element;
                     12:        
                     13:        function __construct(ArrayAccess $object, array &$element)
                     14:        {
1.1.1.2 ! misho      15:                echo __METHOD__ . "(Array)\n";
1.1       misho      16:                $this->object = $object;
                     17:                $this->element = &$element;
                     18:        }
                     19: 
                     20:        function offsetExists($index) {
                     21:                echo __METHOD__ . "($this->element, $index)\n";
                     22:                return array_key_exists($index, $this->element);
                     23:        }
                     24: 
                     25:        function offsetGet($index) {
1.1.1.2 ! misho      26:                echo __METHOD__ . "(Array, $index)\n";
1.1       misho      27:                return isset($this->element[$index]) ? $this->element[$index] : NULL;
                     28:        }
                     29: 
                     30:        function offsetSet($index, $value) {
1.1.1.2 ! misho      31:                echo __METHOD__ . "(Array, $index, $value)\n";
1.1       misho      32:                $this->element[$index] = $value;
                     33:        }
                     34: 
                     35:        function offsetUnset($index) {
1.1.1.2 ! misho      36:                echo __METHOD__ . "(Array, $index)\n";
1.1       misho      37:                unset($this->element[$index]);
                     38:        }
                     39: }
                     40: 
                     41: class Peoples implements ArrayAccess
                     42: {
                     43:        public $person;
                     44:        
                     45:        function __construct()
                     46:        {
                     47:                $this->person = array(array('name'=>'Foo'));
                     48:        }
                     49: 
                     50:        function offsetExists($index)
                     51:        {
                     52:                return array_key_exists($index, $this->person);
                     53:        }
                     54: 
                     55:        function offsetGet($index)
                     56:        {
                     57:                return new ArrayReferenceProxy($this, $this->person[$index]);
                     58:        }
                     59: 
                     60:        function offsetSet($index, $value)
                     61:        {
                     62:                $this->person[$index] = $value;
                     63:        }
                     64: 
                     65:        function offsetUnset($index)
                     66:        {
                     67:                unset($this->person[$index]);
                     68:        }
                     69: }
                     70: 
                     71: $people = new Peoples;
                     72: 
                     73: var_dump($people->person[0]['name']);
                     74: $people->person[0]['name'] = $people->person[0]['name'] . 'Bar';
                     75: var_dump($people->person[0]['name']);
                     76: $people->person[0]['name'] .= 'Baz';
                     77: var_dump($people->person[0]['name']);
                     78: 
                     79: echo "===ArrayOverloading===\n";
                     80: 
                     81: $people = new Peoples;
                     82: 
                     83: var_dump($people[0]);
                     84: var_dump($people[0]['name']);
                     85: $people[0]['name'] = 'FooBar';
                     86: var_dump($people[0]['name']);
                     87: $people[0]['name'] = $people->person[0]['name'] . 'Bar';
                     88: var_dump($people[0]['name']);
                     89: $people[0]['name'] .= 'Baz';
                     90: var_dump($people[0]['name']);
                     91: unset($people[0]['name']);
                     92: var_dump($people[0]);
                     93: var_dump($people[0]['name']);
                     94: $people[0]['name'] = 'BlaBla';
                     95: var_dump($people[0]['name']);
                     96: 
                     97: ?>
                     98: ===DONE===
                     99: <?php exit(0); ?>
                    100: --EXPECTF--
                    101: string(3) "Foo"
                    102: string(6) "FooBar"
                    103: string(9) "FooBarBaz"
                    104: ===ArrayOverloading===
                    105: ArrayReferenceProxy::__construct(Array)
                    106: object(ArrayReferenceProxy)#%d (2) {
                    107:   ["object":"ArrayReferenceProxy":private]=>
                    108:   object(Peoples)#%d (1) {
                    109:     ["person"]=>
                    110:     array(1) {
                    111:       [0]=>
                    112:       &array(1) {
                    113:         ["name"]=>
                    114:         string(3) "Foo"
                    115:       }
                    116:     }
                    117:   }
                    118:   ["element":"ArrayReferenceProxy":private]=>
                    119:   &array(1) {
                    120:     ["name"]=>
                    121:     string(3) "Foo"
                    122:   }
                    123: }
                    124: ArrayReferenceProxy::__construct(Array)
                    125: ArrayReferenceProxy::offsetGet(Array, name)
                    126: string(3) "Foo"
                    127: ArrayReferenceProxy::__construct(Array)
                    128: ArrayReferenceProxy::offsetSet(Array, name, FooBar)
                    129: ArrayReferenceProxy::__construct(Array)
                    130: ArrayReferenceProxy::offsetGet(Array, name)
                    131: string(6) "FooBar"
                    132: ArrayReferenceProxy::__construct(Array)
                    133: ArrayReferenceProxy::offsetSet(Array, name, FooBarBar)
                    134: ArrayReferenceProxy::__construct(Array)
                    135: ArrayReferenceProxy::offsetGet(Array, name)
                    136: string(9) "FooBarBar"
                    137: ArrayReferenceProxy::__construct(Array)
                    138: ArrayReferenceProxy::offsetGet(Array, name)
                    139: ArrayReferenceProxy::offsetSet(Array, name, FooBarBarBaz)
                    140: ArrayReferenceProxy::__construct(Array)
                    141: ArrayReferenceProxy::offsetGet(Array, name)
                    142: string(12) "FooBarBarBaz"
                    143: ArrayReferenceProxy::__construct(Array)
                    144: ArrayReferenceProxy::offsetUnset(Array, name)
                    145: ArrayReferenceProxy::__construct(Array)
                    146: object(ArrayReferenceProxy)#%d (2) {
                    147:   ["object":"ArrayReferenceProxy":private]=>
                    148:   object(Peoples)#%d (1) {
                    149:     ["person"]=>
                    150:     array(1) {
                    151:       [0]=>
                    152:       &array(0) {
                    153:       }
                    154:     }
                    155:   }
                    156:   ["element":"ArrayReferenceProxy":private]=>
                    157:   &array(0) {
                    158:   }
                    159: }
                    160: ArrayReferenceProxy::__construct(Array)
                    161: ArrayReferenceProxy::offsetGet(Array, name)
                    162: NULL
                    163: ArrayReferenceProxy::__construct(Array)
                    164: ArrayReferenceProxy::offsetSet(Array, name, BlaBla)
                    165: ArrayReferenceProxy::__construct(Array)
                    166: ArrayReferenceProxy::offsetGet(Array, name)
                    167: string(6) "BlaBla"
                    168: ===DONE===

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