Annotation of embedaddon/php/ext/spl/tests/arrayObject_magicMethods4.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: SPL: ArrayObject: ensure the magic methods for property access of a subclass of ArrayObject are not invoked when manipulating its elements using [].
        !             3: --FILE--
        !             4: <?php
        !             5: class C {
        !             6:        public $a = 1;
        !             7:        public $b = 2;
        !             8:        public $c = 3;
        !             9: 
        !            10:        private $priv = 'secret';
        !            11: }
        !            12: 
        !            13: class UsesMagic extends ArrayObject {
        !            14:        
        !            15:        public $b = "This should not be in the storage";
        !            16: 
        !            17:        function __get($name) { 
        !            18:                $args = func_get_args();
        !            19:                echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
        !            20:        }
        !            21:        function __set($name, $value) { 
        !            22:                $args = func_get_args();
        !            23:                echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
        !            24:        }
        !            25:        function __isset($name) { 
        !            26:                $args = func_get_args();
        !            27:                echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
        !            28:        }
        !            29:        function __unset($name) { 
        !            30:                $args = func_get_args();
        !            31:                echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
        !            32:        }
        !            33:        
        !            34: }
        !            35: $obj = new C;
        !            36: $ao = new UsesMagic($obj);
        !            37: echo "\n--> Write existent, non-existent and dynamic:\n";
        !            38: $ao['a'] = 'changed';
        !            39: $ao['dynamic'] = 'new';
        !            40: $ao['dynamic'] = 'new.changed';
        !            41: echo "  Original wrapped object:\n";
        !            42: var_dump($obj);
        !            43: echo "  Wrapping ArrayObject:\n";
        !            44: var_dump($ao);
        !            45: 
        !            46: echo "\n--> Read existent, non-existent and dynamic:\n";
        !            47: var_dump($ao['a']);
        !            48: var_dump($ao['nonexistent']);
        !            49: var_dump($ao['dynamic']);
        !            50: echo "  Original wrapped object:\n";
        !            51: var_dump($obj);
        !            52: echo "  Wrapping ArrayObject:\n";
        !            53: var_dump($ao);
        !            54: 
        !            55: echo "\n--> isset existent, non-existent and dynamic:\n";
        !            56: var_dump(isset($ao['a']));
        !            57: var_dump(isset($ao['nonexistent']));
        !            58: var_dump(isset($ao['dynamic']));
        !            59: echo "  Original wrapped object:\n";
        !            60: var_dump($obj);
        !            61: echo "  Wrapping ArrayObject:\n";
        !            62: var_dump($ao);
        !            63: 
        !            64: echo "\n--> Unset existent, non-existent and dynamic:\n";
        !            65: unset($ao['a']);
        !            66: unset($ao['nonexistent']);
        !            67: unset($ao['dynamic']);
        !            68: echo "  Original wrapped object:\n";
        !            69: var_dump($obj);
        !            70: echo "  Wrapping ArrayObject:\n";
        !            71: var_dump($ao);
        !            72: ?>
        !            73: --EXPECTF--
        !            74: --> Write existent, non-existent and dynamic:
        !            75:   Original wrapped object:
        !            76: object(C)#1 (5) {
        !            77:   ["a"]=>
        !            78:   string(7) "changed"
        !            79:   ["b"]=>
        !            80:   int(2)
        !            81:   ["c"]=>
        !            82:   int(3)
        !            83:   ["priv":"C":private]=>
        !            84:   string(6) "secret"
        !            85:   ["dynamic"]=>
        !            86:   string(11) "new.changed"
        !            87: }
        !            88:   Wrapping ArrayObject:
        !            89: object(UsesMagic)#2 (2) {
        !            90:   ["b"]=>
        !            91:   string(33) "This should not be in the storage"
        !            92:   ["storage":"ArrayObject":private]=>
        !            93:   object(C)#1 (5) {
        !            94:     ["a"]=>
        !            95:     string(7) "changed"
        !            96:     ["b"]=>
        !            97:     int(2)
        !            98:     ["c"]=>
        !            99:     int(3)
        !           100:     ["priv":"C":private]=>
        !           101:     string(6) "secret"
        !           102:     ["dynamic"]=>
        !           103:     string(11) "new.changed"
        !           104:   }
        !           105: }
        !           106: 
        !           107: --> Read existent, non-existent and dynamic:
        !           108: string(7) "changed"
        !           109: 
        !           110: Notice: Undefined index:  nonexistent in %s on line 45
        !           111: NULL
        !           112: string(11) "new.changed"
        !           113:   Original wrapped object:
        !           114: object(C)#1 (5) {
        !           115:   ["a"]=>
        !           116:   string(7) "changed"
        !           117:   ["b"]=>
        !           118:   int(2)
        !           119:   ["c"]=>
        !           120:   int(3)
        !           121:   ["priv":"C":private]=>
        !           122:   string(6) "secret"
        !           123:   ["dynamic"]=>
        !           124:   string(11) "new.changed"
        !           125: }
        !           126:   Wrapping ArrayObject:
        !           127: object(UsesMagic)#2 (2) {
        !           128:   ["b"]=>
        !           129:   string(33) "This should not be in the storage"
        !           130:   ["storage":"ArrayObject":private]=>
        !           131:   object(C)#1 (5) {
        !           132:     ["a"]=>
        !           133:     string(7) "changed"
        !           134:     ["b"]=>
        !           135:     int(2)
        !           136:     ["c"]=>
        !           137:     int(3)
        !           138:     ["priv":"C":private]=>
        !           139:     string(6) "secret"
        !           140:     ["dynamic"]=>
        !           141:     string(11) "new.changed"
        !           142:   }
        !           143: }
        !           144: 
        !           145: --> isset existent, non-existent and dynamic:
        !           146: bool(true)
        !           147: bool(false)
        !           148: bool(true)
        !           149:   Original wrapped object:
        !           150: object(C)#1 (5) {
        !           151:   ["a"]=>
        !           152:   string(7) "changed"
        !           153:   ["b"]=>
        !           154:   int(2)
        !           155:   ["c"]=>
        !           156:   int(3)
        !           157:   ["priv":"C":private]=>
        !           158:   string(6) "secret"
        !           159:   ["dynamic"]=>
        !           160:   string(11) "new.changed"
        !           161: }
        !           162:   Wrapping ArrayObject:
        !           163: object(UsesMagic)#2 (2) {
        !           164:   ["b"]=>
        !           165:   string(33) "This should not be in the storage"
        !           166:   ["storage":"ArrayObject":private]=>
        !           167:   object(C)#1 (5) {
        !           168:     ["a"]=>
        !           169:     string(7) "changed"
        !           170:     ["b"]=>
        !           171:     int(2)
        !           172:     ["c"]=>
        !           173:     int(3)
        !           174:     ["priv":"C":private]=>
        !           175:     string(6) "secret"
        !           176:     ["dynamic"]=>
        !           177:     string(11) "new.changed"
        !           178:   }
        !           179: }
        !           180: 
        !           181: --> Unset existent, non-existent and dynamic:
        !           182: 
        !           183: Notice: Undefined index:  nonexistent in %s on line 63
        !           184:   Original wrapped object:
        !           185: object(C)#1 (3) {
        !           186:   ["b"]=>
        !           187:   int(2)
        !           188:   ["c"]=>
        !           189:   int(3)
        !           190:   ["priv":"C":private]=>
        !           191:   string(6) "secret"
        !           192: }
        !           193:   Wrapping ArrayObject:
        !           194: object(UsesMagic)#2 (2) {
        !           195:   ["b"]=>
        !           196:   string(33) "This should not be in the storage"
        !           197:   ["storage":"ArrayObject":private]=>
        !           198:   object(C)#1 (3) {
        !           199:     ["b"]=>
        !           200:     int(2)
        !           201:     ["c"]=>
        !           202:     int(3)
        !           203:     ["priv":"C":private]=>
        !           204:     string(6) "secret"
        !           205:   }
        !           206: }

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