ReflectionProperty_isInitialized.phpt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. --TEST--
  2. Test ReflectionProperty::isInitialized()
  3. --FILE--
  4. <?php
  5. class A {
  6. public static ?string $ssv = null;
  7. public static ?string $ss;
  8. public static $s;
  9. public ?int $iv = null;
  10. public ?int $i;
  11. public $n;
  12. private int $p;
  13. }
  14. class B extends A { }
  15. echo "Static properties:\n";
  16. var_dump((new ReflectionProperty(A::class, 'ssv'))->isInitialized());
  17. var_dump((new ReflectionProperty(A::class, 'ss'))->isInitialized());
  18. var_dump((new ReflectionProperty(A::class, 's'))->isInitialized());
  19. echo "Declared properties:\n";
  20. $a = new A;
  21. var_dump((new ReflectionProperty($a, 'iv'))->isInitialized($a));
  22. var_dump((new ReflectionProperty($a, 'i'))->isInitialized($a));
  23. var_dump((new ReflectionProperty($a, 'n'))->isInitialized($a));
  24. echo "Declared properties after unset:\n";
  25. unset($a->iv);
  26. unset($a->i);
  27. unset($a->n);
  28. var_dump((new ReflectionProperty($a, 'i'))->isInitialized($a));
  29. var_dump((new ReflectionProperty($a, 'iv'))->isInitialized($a));
  30. var_dump((new ReflectionProperty($a, 'n'))->isInitialized($a));
  31. echo "Dynamic properties:\n";
  32. $a->d = null;
  33. $rp = new ReflectionProperty($a, 'd');
  34. var_dump($rp->isInitialized($a));
  35. unset($a->d);
  36. var_dump($rp->isInitialized($a));
  37. echo "Visibility handling:\n";
  38. $rp = new ReflectionProperty('A', 'p');
  39. var_dump($rp->isInitialized($a));
  40. var_dump($rp->isInitialized($a));
  41. echo "Object type:\n";
  42. $rp = new ReflectionProperty('B', 'i');
  43. var_dump($rp->isInitialized($a));
  44. try {
  45. var_dump($rp->isInitialized(new stdClass));
  46. } catch (ReflectionException $e) {
  47. echo $e->getMessage(), "\n";
  48. }
  49. try {
  50. var_dump($rp->isInitialized());
  51. } catch (TypeError $e) {
  52. echo $e->getMessage(), "\n";
  53. }
  54. class WithMagic {
  55. public $prop;
  56. public int $intProp;
  57. public function __isset($name) {
  58. echo "__isset($name)\n";
  59. return true;
  60. }
  61. public function __get($name) {
  62. echo "__get($name)\n";
  63. return "foobar";
  64. }
  65. }
  66. echo "Class with __isset:\n";
  67. $obj = new WithMagic;
  68. unset($obj->prop);
  69. $rp = new ReflectionProperty('WithMagic', 'prop');
  70. var_dump($rp->isInitialized($obj));
  71. $rp = new ReflectionProperty('WithMagic', 'intProp');
  72. var_dump($rp->isInitialized($obj));
  73. ?>
  74. --EXPECT--
  75. Static properties:
  76. bool(true)
  77. bool(false)
  78. bool(true)
  79. Declared properties:
  80. bool(true)
  81. bool(false)
  82. bool(true)
  83. Declared properties after unset:
  84. bool(false)
  85. bool(false)
  86. bool(false)
  87. Dynamic properties:
  88. bool(true)
  89. bool(false)
  90. Visibility handling:
  91. bool(false)
  92. bool(false)
  93. Object type:
  94. bool(false)
  95. Given object is not an instance of the class this property was declared in
  96. ReflectionProperty::isInitialized(): Argument #1 ($object) must be provided for instance properties
  97. Class with __isset:
  98. bool(false)
  99. bool(false)