Annotation of embedaddon/php/tests/classes/array_access_009.phpt, revision 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>