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

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

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