bug31683.phpt 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. --TEST--
  2. Bug #31683 (changes to $name in __get($name) override future parameters)
  3. --FILE--
  4. <?php
  5. class Foo implements ArrayAccess {
  6. function __get($test) {
  7. var_dump($test);
  8. $test = 'bug';
  9. }
  10. function __set($test, $val) {
  11. var_dump($test);
  12. var_dump($val);
  13. $test = 'bug';
  14. $val = 'bug';
  15. }
  16. function __call($test, $arg) {
  17. var_dump($test);
  18. $test = 'bug';
  19. }
  20. function offsetget($test): mixed {
  21. var_dump($test);
  22. $test = 'bug';
  23. return 123;
  24. }
  25. function offsetset($test, $val): void {
  26. var_dump($test);
  27. var_dump($val);
  28. $test = 'bug';
  29. $val = 'bug';
  30. }
  31. function offsetexists($test): bool {
  32. var_dump($test);
  33. $test = 'bug';
  34. return true;
  35. }
  36. function offsetunset($test): void {
  37. var_dump($test);
  38. $test = 'bug';
  39. }
  40. }
  41. $foo = new Foo();
  42. $a = "ok";
  43. for ($i=0; $i < 2; $i++) {
  44. $foo->ok("ok");
  45. $foo->ok;
  46. $foo->ok = "ok";
  47. $x = $foo["ok"];
  48. $foo["ok"] = "ok";
  49. isset($foo["ok"]);
  50. unset($foo["ok"]);
  51. // $foo[];
  52. $foo[] = "ok";
  53. // isset($foo[]);
  54. // unset($foo[]);
  55. $foo->$a;
  56. echo "---\n";
  57. }
  58. ?>
  59. --EXPECT--
  60. string(2) "ok"
  61. string(2) "ok"
  62. string(2) "ok"
  63. string(2) "ok"
  64. string(2) "ok"
  65. string(2) "ok"
  66. string(2) "ok"
  67. string(2) "ok"
  68. string(2) "ok"
  69. NULL
  70. string(2) "ok"
  71. string(2) "ok"
  72. ---
  73. string(2) "ok"
  74. string(2) "ok"
  75. string(2) "ok"
  76. string(2) "ok"
  77. string(2) "ok"
  78. string(2) "ok"
  79. string(2) "ok"
  80. string(2) "ok"
  81. string(2) "ok"
  82. NULL
  83. string(2) "ok"
  84. string(2) "ok"
  85. ---