Annotation of embedaddon/php/ext/spl/tests/arrayObject_magicMethods2.phpt, revision 1.1.1.1

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

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