You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
3.7 KiB

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