bug71359.phpt 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. --TEST--
  2. Bug #71359: Null coalescing operator and magic
  3. --FILE--
  4. <?php
  5. class AA {
  6. private $data = [];
  7. public function __isset($name) {
  8. echo "__isset($name)\n";
  9. return array_key_exists($name, $this->data);
  10. }
  11. public function &__get($name) {
  12. echo "__get($name)\n";
  13. if (!array_key_exists($name, $this->data)) {
  14. throw new Exception('Unknown offset');
  15. }
  16. return $this->data[$name];
  17. }
  18. public function __set($name, $value) {
  19. echo "__set($name)\n";
  20. $this->data[$name] = $value;
  21. }
  22. public function __unset($name) {
  23. echo "__unset($name)\n";
  24. unset($this->data[$name]);
  25. }
  26. }
  27. $aa = new AA;
  28. var_dump(isset($aa->zero->one->two));
  29. var_dump(isset($aa->zero->foo));
  30. var_dump($aa->zero ?? 42);
  31. var_dump($aa->zero->one->two ?? 42);
  32. $aa->zero = new AA;
  33. $aa->zero->one = new AA;
  34. var_dump(isset($aa->zero->one->two));
  35. var_dump($aa->zero->one->two ?? 42);
  36. ?>
  37. --EXPECT--
  38. __isset(zero)
  39. bool(false)
  40. __isset(zero)
  41. bool(false)
  42. __isset(zero)
  43. int(42)
  44. __isset(zero)
  45. int(42)
  46. __set(zero)
  47. __get(zero)
  48. __set(one)
  49. __isset(zero)
  50. __get(zero)
  51. __isset(one)
  52. __get(one)
  53. __isset(two)
  54. bool(false)
  55. __isset(zero)
  56. __get(zero)
  57. __isset(one)
  58. __get(one)
  59. __isset(two)
  60. int(42)