Annotation of embedaddon/php/ext/spl/tests/arrayObject_magicMethods5.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 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 appear in 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: In UsesMagic::__set(a,changed)
        !            76: In UsesMagic::__set(dynamic,new)
        !            77: In UsesMagic::__set(dynamic,new.changed)
        !            78:   Original wrapped object:
        !            79: object(C)#1 (4) {
        !            80:   ["a"]=>
        !            81:   int(1)
        !            82:   ["b"]=>
        !            83:   int(2)
        !            84:   ["c"]=>
        !            85:   int(3)
        !            86:   ["priv":"C":private]=>
        !            87:   string(6) "secret"
        !            88: }
        !            89:   Wrapping ArrayObject:
        !            90: object(UsesMagic)#2 (2) {
        !            91:   ["b"]=>
        !            92:   string(29) "This should appear in storage"
        !            93:   ["storage":"ArrayObject":private]=>
        !            94:   object(C)#1 (4) {
        !            95:     ["a"]=>
        !            96:     int(1)
        !            97:     ["b"]=>
        !            98:     int(2)
        !            99:     ["c"]=>
        !           100:     int(3)
        !           101:     ["priv":"C":private]=>
        !           102:     string(6) "secret"
        !           103:   }
        !           104: }
        !           105: 
        !           106: --> Read existent, non-existent and dynamic:
        !           107: In UsesMagic::__get(a)
        !           108: NULL
        !           109: In UsesMagic::__get(nonexistent)
        !           110: NULL
        !           111: In UsesMagic::__get(dynamic)
        !           112: NULL
        !           113:   Original wrapped object:
        !           114: object(C)#1 (4) {
        !           115:   ["a"]=>
        !           116:   int(1)
        !           117:   ["b"]=>
        !           118:   int(2)
        !           119:   ["c"]=>
        !           120:   int(3)
        !           121:   ["priv":"C":private]=>
        !           122:   string(6) "secret"
        !           123: }
        !           124:   Wrapping ArrayObject:
        !           125: object(UsesMagic)#2 (2) {
        !           126:   ["b"]=>
        !           127:   string(29) "This should appear in storage"
        !           128:   ["storage":"ArrayObject":private]=>
        !           129:   object(C)#1 (4) {
        !           130:     ["a"]=>
        !           131:     int(1)
        !           132:     ["b"]=>
        !           133:     int(2)
        !           134:     ["c"]=>
        !           135:     int(3)
        !           136:     ["priv":"C":private]=>
        !           137:     string(6) "secret"
        !           138:   }
        !           139: }
        !           140: 
        !           141: --> isset existent, non-existent and dynamic:
        !           142: In UsesMagic::__isset(a)
        !           143: bool(false)
        !           144: In UsesMagic::__isset(nonexistent)
        !           145: bool(false)
        !           146: In UsesMagic::__isset(dynamic)
        !           147: bool(false)
        !           148:   Original wrapped object:
        !           149: object(C)#1 (4) {
        !           150:   ["a"]=>
        !           151:   int(1)
        !           152:   ["b"]=>
        !           153:   int(2)
        !           154:   ["c"]=>
        !           155:   int(3)
        !           156:   ["priv":"C":private]=>
        !           157:   string(6) "secret"
        !           158: }
        !           159:   Wrapping ArrayObject:
        !           160: object(UsesMagic)#2 (2) {
        !           161:   ["b"]=>
        !           162:   string(29) "This should appear in storage"
        !           163:   ["storage":"ArrayObject":private]=>
        !           164:   object(C)#1 (4) {
        !           165:     ["a"]=>
        !           166:     int(1)
        !           167:     ["b"]=>
        !           168:     int(2)
        !           169:     ["c"]=>
        !           170:     int(3)
        !           171:     ["priv":"C":private]=>
        !           172:     string(6) "secret"
        !           173:   }
        !           174: }
        !           175: 
        !           176: --> Unset existent, non-existent and dynamic:
        !           177: In UsesMagic::__unset(a)
        !           178: In UsesMagic::__unset(nonexistent)
        !           179: In UsesMagic::__unset(dynamic)
        !           180:   Original wrapped object:
        !           181: object(C)#1 (4) {
        !           182:   ["a"]=>
        !           183:   int(1)
        !           184:   ["b"]=>
        !           185:   int(2)
        !           186:   ["c"]=>
        !           187:   int(3)
        !           188:   ["priv":"C":private]=>
        !           189:   string(6) "secret"
        !           190: }
        !           191:   Wrapping ArrayObject:
        !           192: object(UsesMagic)#2 (2) {
        !           193:   ["b"]=>
        !           194:   string(29) "This should appear in storage"
        !           195:   ["storage":"ArrayObject":private]=>
        !           196:   object(C)#1 (4) {
        !           197:     ["a"]=>
        !           198:     int(1)
        !           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>