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

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

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