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.

186 lines
3.5 KiB

  1. --TEST--
  2. SPL: ArrayObject: ensure the magic methods for property access of a subclass of ArrayObject ARE 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. In UsesMagic::__set(a,changed)
  68. In UsesMagic::__set(dynamic,new)
  69. In UsesMagic::__set(dynamic,new.changed)
  70. Original wrapped object:
  71. object(C)#%d (4) {
  72. ["a"]=>
  73. int(1)
  74. ["b"]=>
  75. int(2)
  76. ["c"]=>
  77. int(3)
  78. ["priv:private"]=>
  79. string(6) "secret"
  80. }
  81. Wrapping ArrayObject:
  82. object(UsesMagic)#%d (4) {
  83. ["a"]=>
  84. int(1)
  85. ["b"]=>
  86. int(2)
  87. ["c"]=>
  88. int(3)
  89. ["priv:private"]=>
  90. string(6) "secret"
  91. }
  92. --> Read existent, non-existent and dynamic:
  93. In UsesMagic::__get(a)
  94. NULL
  95. In UsesMagic::__get(nonexistent)
  96. NULL
  97. In UsesMagic::__get(dynamic)
  98. NULL
  99. Original wrapped object:
  100. object(C)#%d (4) {
  101. ["a"]=>
  102. int(1)
  103. ["b"]=>
  104. int(2)
  105. ["c"]=>
  106. int(3)
  107. ["priv:private"]=>
  108. string(6) "secret"
  109. }
  110. Wrapping ArrayObject:
  111. object(UsesMagic)#%d (4) {
  112. ["a"]=>
  113. int(1)
  114. ["b"]=>
  115. int(2)
  116. ["c"]=>
  117. int(3)
  118. ["priv:private"]=>
  119. string(6) "secret"
  120. }
  121. --> isset existent, non-existent and dynamic:
  122. In UsesMagic::__isset(a)
  123. bool(false)
  124. In UsesMagic::__isset(nonexistent)
  125. bool(false)
  126. In UsesMagic::__isset(dynamic)
  127. bool(false)
  128. Original wrapped object:
  129. object(C)#%d (4) {
  130. ["a"]=>
  131. int(1)
  132. ["b"]=>
  133. int(2)
  134. ["c"]=>
  135. int(3)
  136. ["priv:private"]=>
  137. string(6) "secret"
  138. }
  139. Wrapping ArrayObject:
  140. object(UsesMagic)#%d (4) {
  141. ["a"]=>
  142. int(1)
  143. ["b"]=>
  144. int(2)
  145. ["c"]=>
  146. int(3)
  147. ["priv:private"]=>
  148. string(6) "secret"
  149. }
  150. --> Unset existent, non-existent and dynamic:
  151. In UsesMagic::__unset(a)
  152. In UsesMagic::__unset(nonexistent)
  153. In UsesMagic::__unset(dynamic)
  154. Original wrapped object:
  155. object(C)#%d (4) {
  156. ["a"]=>
  157. int(1)
  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 (4) {
  167. ["a"]=>
  168. int(1)
  169. ["b"]=>
  170. int(2)
  171. ["c"]=>
  172. int(3)
  173. ["priv:private"]=>
  174. string(6) "secret"
  175. }