bug28444.phpt 1.2 KB

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