diff options
Diffstat (limited to 'ext/spl/tests/arrayObject_magicMethods6.phpt')
-rw-r--r-- | ext/spl/tests/arrayObject_magicMethods6.phpt | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/ext/spl/tests/arrayObject_magicMethods6.phpt b/ext/spl/tests/arrayObject_magicMethods6.phpt new file mode 100644 index 000000000..3b3fff8f7 --- /dev/null +++ b/ext/spl/tests/arrayObject_magicMethods6.phpt @@ -0,0 +1,186 @@ +--TEST--
+SPL: ArrayObject: ensure the magic methods for property access of a subclass of ArrayObject are not invoked when manipulating its elements using -> ArrayObject::ARRAY_AS_PROPS.
+--FILE--
+<?php
+class C {
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
+
+ private $priv = 'secret';
+}
+
+class UsesMagic extends ArrayObject {
+
+ public $b = "This should never show up";
+
+ 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 C;
+$ao = new UsesMagic($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(C)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Read existent, non-existent and dynamic:
+string(7) "changed"
+
+Notice: Undefined index: nonexistent in %s on line 45
+NULL
+string(11) "new.changed"
+ Original wrapped object:
+object(C)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv: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(C)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Unset existent, non-existent and dynamic:
+
+Notice: Undefined index: nonexistent in %s on line 63
+ Original wrapped object:
+object(C)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
\ No newline at end of file |