property_exists.phpt 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. --TEST--
  2. Reflection and property_exists()
  3. --FILE--
  4. <?php
  5. class A
  6. {
  7. public $a = 1;
  8. protected $b = 2;
  9. private $c = 3;
  10. public $empty;
  11. public $init = 1;
  12. function __toString()
  13. {
  14. return 'obj(' . get_class($this) . ')';
  15. }
  16. static function test($oc, $props)
  17. {
  18. echo '===' . __CLASS__ . "===\n";
  19. foreach($props as $p2) {
  20. echo $oc, '::$' , $p2, "\n";
  21. var_dump(property_exists($oc, $p2));
  22. }
  23. }
  24. }
  25. class B extends A
  26. {
  27. private $c = 4;
  28. static function test($oc, $props)
  29. {
  30. echo '===' . __CLASS__ . "===\n";
  31. foreach($props as $p2) {
  32. echo $oc, '::$' , $p2, "\n";
  33. var_dump(property_exists($oc, $p2));
  34. }
  35. }
  36. }
  37. class C extends B
  38. {
  39. private $d = 5;
  40. static function test($oc, $props)
  41. {
  42. echo '===' . __CLASS__ . "===\n";
  43. foreach($props as $p2) {
  44. echo $oc, '::$' , $p2, "\n";
  45. var_dump(property_exists($oc, $p2));
  46. }
  47. }
  48. }
  49. $oA = new A;
  50. $oA->e = 6;
  51. $oC = new C;
  52. $pc = array($oA, 'A', 'B', 'C', $oC);
  53. $pr = array('a', 'b', 'c', 'd', 'e');
  54. foreach($pc as $p1) {
  55. if (is_object($p1)) {
  56. $p1->test($p1, $pr);
  57. } else {
  58. $r = new ReflectionMethod($p1, 'test');
  59. $r->invoke(NULL, $p1, $pr);
  60. }
  61. echo "===GLOBAL===\n";
  62. foreach($pr as $p2) {
  63. echo $p1, '::$' , $p2, "\n";
  64. var_dump(property_exists($p1, $p2));
  65. }
  66. }
  67. echo "===PROBLEMS===\n";
  68. var_dump(property_exists(NULL, 'empty'));
  69. var_dump(property_exists(25,'empty'));
  70. var_dump(property_exists('',''));
  71. var_dump(property_exists('A',''));
  72. var_dump(property_exists('A','123'));
  73. var_dump(property_exists('A','init'));
  74. var_dump(property_exists('A','empty'));
  75. var_dump(property_exists(new A, ''));
  76. var_dump(property_exists(new A, '123'));
  77. var_dump(property_exists(new A, 'init'));
  78. var_dump(property_exists(new A, 'empty'));
  79. ?>
  80. ===DONE===
  81. <?php exit(0); ?>
  82. --EXPECTF--
  83. ===A===
  84. obj(A)::$a
  85. bool(true)
  86. obj(A)::$b
  87. bool(true)
  88. obj(A)::$c
  89. bool(true)
  90. obj(A)::$d
  91. bool(false)
  92. obj(A)::$e
  93. bool(true)
  94. ===GLOBAL===
  95. obj(A)::$a
  96. bool(true)
  97. obj(A)::$b
  98. bool(true)
  99. obj(A)::$c
  100. bool(true)
  101. obj(A)::$d
  102. bool(false)
  103. obj(A)::$e
  104. bool(true)
  105. ===A===
  106. A::$a
  107. bool(true)
  108. A::$b
  109. bool(true)
  110. A::$c
  111. bool(true)
  112. A::$d
  113. bool(false)
  114. A::$e
  115. bool(false)
  116. ===GLOBAL===
  117. A::$a
  118. bool(true)
  119. A::$b
  120. bool(true)
  121. A::$c
  122. bool(true)
  123. A::$d
  124. bool(false)
  125. A::$e
  126. bool(false)
  127. ===B===
  128. B::$a
  129. bool(true)
  130. B::$b
  131. bool(true)
  132. B::$c
  133. bool(true)
  134. B::$d
  135. bool(false)
  136. B::$e
  137. bool(false)
  138. ===GLOBAL===
  139. B::$a
  140. bool(true)
  141. B::$b
  142. bool(true)
  143. B::$c
  144. bool(true)
  145. B::$d
  146. bool(false)
  147. B::$e
  148. bool(false)
  149. ===C===
  150. C::$a
  151. bool(true)
  152. C::$b
  153. bool(true)
  154. C::$c
  155. bool(false)
  156. C::$d
  157. bool(true)
  158. C::$e
  159. bool(false)
  160. ===GLOBAL===
  161. C::$a
  162. bool(true)
  163. C::$b
  164. bool(true)
  165. C::$c
  166. bool(false)
  167. C::$d
  168. bool(true)
  169. C::$e
  170. bool(false)
  171. ===C===
  172. obj(C)::$a
  173. bool(true)
  174. obj(C)::$b
  175. bool(true)
  176. obj(C)::$c
  177. bool(false)
  178. obj(C)::$d
  179. bool(true)
  180. obj(C)::$e
  181. bool(false)
  182. ===GLOBAL===
  183. obj(C)::$a
  184. bool(true)
  185. obj(C)::$b
  186. bool(true)
  187. obj(C)::$c
  188. bool(false)
  189. obj(C)::$d
  190. bool(true)
  191. obj(C)::$e
  192. bool(false)
  193. ===PROBLEMS===
  194. Warning: First parameter must either be an object or the name of an existing class in %sproperty_exists.php on line %d
  195. NULL
  196. Warning: First parameter must either be an object or the name of an existing class in %sproperty_exists.php on line %d
  197. NULL
  198. bool(false)
  199. bool(false)
  200. bool(false)
  201. bool(true)
  202. bool(true)
  203. bool(false)
  204. bool(false)
  205. bool(true)
  206. bool(true)
  207. ===DONE===