bug28444.phpt 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. --TEST--
  2. Bug #28444 (Cannot access undefined property for object with overloaded property access)
  3. --FILE--
  4. <?php
  5. class ObjectOne
  6. {
  7. public $x;
  8. function __construct($x)
  9. {
  10. $this->x = $x;
  11. }
  12. function __toString() {
  13. return "Object";
  14. }
  15. }
  16. class Overloaded
  17. {
  18. public $props = array();
  19. public $x;
  20. function __construct($x)
  21. {
  22. $this->x = new ObjectOne($x);
  23. }
  24. function __get($prop)
  25. {
  26. echo __METHOD__ . "($prop)\n";
  27. return $this->props[$prop];
  28. }
  29. function __set($prop, $val)
  30. {
  31. echo __METHOD__ . "($prop,$val)\n";
  32. $this->props[$prop] = $val;
  33. }
  34. }
  35. $y = new Overloaded(2);
  36. var_dump($y->x);
  37. var_dump($y->x->x);
  38. var_dump($y->x->x = 3);
  39. var_dump($y->y = 3);
  40. var_dump($y->y);
  41. var_dump($y->z = new ObjectOne(4));
  42. var_dump($y->z->x);
  43. $t = $y->z;
  44. var_dump($t->x = 5);
  45. var_dump($y->z->x = 6);
  46. ?>
  47. --EXPECT--
  48. object(ObjectOne)#2 (1) {
  49. ["x"]=>
  50. int(2)
  51. }
  52. int(2)
  53. int(3)
  54. Overloaded::__set(y,3)
  55. int(3)
  56. Overloaded::__get(y)
  57. int(3)
  58. Overloaded::__set(z,Object)
  59. object(ObjectOne)#3 (1) {
  60. ["x"]=>
  61. int(4)
  62. }
  63. Overloaded::__get(z)
  64. int(4)
  65. Overloaded::__get(z)
  66. int(5)
  67. Overloaded::__get(z)
  68. int(6)