123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- --TEST--
- SPL: ArrayObject: ensure a wrapped object's magic methods for property access are not invoked when manipulating the ArrayObject's elements using -> and ArrayObject::ARRAY_AS_PROPS.
- --FILE--
- <?php
- class UsesMagic {
- public $a = 1;
- public $b = 2;
- public $c = 3;
- private $priv = 'secret';
- function __get($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __set($name, $value) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __isset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __unset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- }
- $obj = new UsesMagic;
- $ao = new ArrayObject($obj, ArrayObject::ARRAY_AS_PROPS);
- echo "\n--> Write existent, non-existent and dynamic:\n";
- $ao->a = 'changed';
- $ao->dynamic = 'new';
- $ao->dynamic = 'new.changed';
- echo " Original wrapped object:\n";
- var_dump($obj);
- echo " Wrapping ArrayObject:\n";
- var_dump($ao);
- echo "\n--> Read existent, non-existent and dynamic:\n";
- var_dump($ao->a);
- var_dump($ao->nonexistent);
- var_dump($ao->dynamic);
- echo " Original wrapped object:\n";
- var_dump($obj);
- echo " Wrapping ArrayObject:\n";
- var_dump($ao);
- echo "\n--> isset existent, non-existent and dynamic:\n";
- var_dump(isset($ao->a));
- var_dump(isset($ao->nonexistent));
- var_dump(isset($ao->dynamic));
- echo " Original wrapped object:\n";
- var_dump($obj);
- echo " Wrapping ArrayObject:\n";
- var_dump($ao);
- echo "\n--> Unset existent, non-existent and dynamic:\n";
- unset($ao->a);
- unset($ao->nonexistent);
- unset($ao->dynamic);
- echo " Original wrapped object:\n";
- var_dump($obj);
- echo " Wrapping ArrayObject:\n";
- var_dump($ao);
- ?>
- --EXPECTF--
- --> Write existent, non-existent and dynamic:
- Original wrapped object:
- object(UsesMagic)#1 (5) {
- ["a"]=>
- string(7) "changed"
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["priv":"UsesMagic":private]=>
- string(6) "secret"
- ["dynamic"]=>
- string(11) "new.changed"
- }
- Wrapping ArrayObject:
- object(ArrayObject)#2 (1) {
- ["storage":"ArrayObject":private]=>
- object(UsesMagic)#1 (5) {
- ["a"]=>
- string(7) "changed"
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["priv":"UsesMagic":private]=>
- string(6) "secret"
- ["dynamic"]=>
- string(11) "new.changed"
- }
- }
- --> Read existent, non-existent and dynamic:
- string(7) "changed"
- Warning: Undefined array key "nonexistent" in %s on line %d
- NULL
- string(11) "new.changed"
- Original wrapped object:
- object(UsesMagic)#1 (5) {
- ["a"]=>
- string(7) "changed"
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["priv":"UsesMagic":private]=>
- string(6) "secret"
- ["dynamic"]=>
- string(11) "new.changed"
- }
- Wrapping ArrayObject:
- object(ArrayObject)#2 (1) {
- ["storage":"ArrayObject":private]=>
- object(UsesMagic)#1 (5) {
- ["a"]=>
- string(7) "changed"
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["priv":"UsesMagic":private]=>
- string(6) "secret"
- ["dynamic"]=>
- string(11) "new.changed"
- }
- }
- --> isset existent, non-existent and dynamic:
- bool(true)
- bool(false)
- bool(true)
- Original wrapped object:
- object(UsesMagic)#1 (5) {
- ["a"]=>
- string(7) "changed"
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["priv":"UsesMagic":private]=>
- string(6) "secret"
- ["dynamic"]=>
- string(11) "new.changed"
- }
- Wrapping ArrayObject:
- object(ArrayObject)#2 (1) {
- ["storage":"ArrayObject":private]=>
- object(UsesMagic)#1 (5) {
- ["a"]=>
- string(7) "changed"
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["priv":"UsesMagic":private]=>
- string(6) "secret"
- ["dynamic"]=>
- string(11) "new.changed"
- }
- }
- --> Unset existent, non-existent and dynamic:
- Original wrapped object:
- object(UsesMagic)#1 (3) {
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["priv":"UsesMagic":private]=>
- string(6) "secret"
- }
- Wrapping ArrayObject:
- object(ArrayObject)#2 (1) {
- ["storage":"ArrayObject":private]=>
- object(UsesMagic)#1 (3) {
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["priv":"UsesMagic":private]=>
- string(6) "secret"
- }
- }
|