bug74058.phpt 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. --TEST--
  2. Bug #74058 (ArrayObject can not notice changes)
  3. --FILE--
  4. <?php
  5. class MyArrayObject extends ArrayObject
  6. {
  7. public function __construct($input = [])
  8. {
  9. parent::__construct($input, ArrayObject::ARRAY_AS_PROPS);
  10. }
  11. public function offsetSet($x, $v): void
  12. {
  13. echo "offsetSet('{$x}')\n";
  14. parent::offsetSet($x, $v);
  15. }
  16. public function offsetGet($x): mixed
  17. {
  18. echo "offsetGet('{$x}')\n";
  19. return parent::offsetGet($x);
  20. }
  21. }
  22. class MyArray extends ArrayObject
  23. {
  24. public function __construct($input = [])
  25. {
  26. parent::__construct($input);
  27. }
  28. public function offsetSet($x, $v): void
  29. {
  30. echo "offsetSet('{$x}')\n";
  31. parent::offsetSet($x, $v);
  32. }
  33. public function offsetGet($x): mixed
  34. {
  35. echo "offsetGet('{$x}')\n";
  36. return parent::offsetGet($x);
  37. }
  38. }
  39. $x = new MyArrayObject;
  40. $x->a1 = new stdClass();
  41. var_dump($x->a1);
  42. $x->a1->b = 'some value';
  43. var_dump($x->a1);
  44. $y = new MyArray();
  45. $y['a2'] = new stdClass();
  46. var_dump($y['a2']);
  47. $y['a2']->b = 'some value';
  48. var_dump($y['a2']);
  49. ?>
  50. --EXPECTF--
  51. offsetSet('a1')
  52. offsetGet('a1')
  53. object(stdClass)#%s (0) {
  54. }
  55. offsetGet('a1')
  56. offsetGet('a1')
  57. object(stdClass)#%s (1) {
  58. ["b"]=>
  59. string(10) "some value"
  60. }
  61. offsetSet('a2')
  62. offsetGet('a2')
  63. object(stdClass)#%s (0) {
  64. }
  65. offsetGet('a2')
  66. offsetGet('a2')
  67. object(stdClass)#%s (1) {
  68. ["b"]=>
  69. string(10) "some value"
  70. }