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