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.

185 lines
3.6 KiB

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