Annotation of embedaddon/php/ext/spl/tests/arrayObject_magicMethods5.phpt, revision 1.1.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>