123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- --TEST--
- Reflection and property_exists()
- --FILE--
- <?php
- class A
- {
- public $a = 1;
- protected $b = 2;
- private $c = 3;
- public $empty;
- public $init = 1;
- function __toString()
- {
- return 'obj(' . get_class($this) . ')';
- }
- static function test($oc, $props)
- {
- echo '===' . __CLASS__ . "===\n";
- foreach($props as $p2) {
- echo $oc, '::$' , $p2, "\n";
- var_dump(property_exists($oc, $p2));
- }
- }
- }
- class B extends A
- {
- private $c = 4;
- static function test($oc, $props)
- {
- echo '===' . __CLASS__ . "===\n";
- foreach($props as $p2) {
- echo $oc, '::$' , $p2, "\n";
- var_dump(property_exists($oc, $p2));
- }
- }
- }
- class C extends B
- {
- private $d = 5;
- static function test($oc, $props)
- {
- echo '===' . __CLASS__ . "===\n";
- foreach($props as $p2) {
- echo $oc, '::$' , $p2, "\n";
- var_dump(property_exists($oc, $p2));
- }
- }
- }
- $oA = new A;
- $oA->e = 6;
- $oC = new C;
- $pc = array($oA, 'A', 'B', 'C', $oC);
- $pr = array('a', 'b', 'c', 'd', 'e');
- foreach($pc as $p1) {
- if (is_object($p1)) {
- $p1->test($p1, $pr);
- } else {
- $r = new ReflectionMethod($p1, 'test');
- $r->invoke(NULL, $p1, $pr);
- }
- echo "===GLOBAL===\n";
- foreach($pr as $p2) {
- echo $p1, '::$' , $p2, "\n";
- var_dump(property_exists($p1, $p2));
- }
- }
- echo "===PROBLEMS===\n";
- try {
- var_dump(property_exists(NULL, 'empty'));
- } catch (\TypeError $e) {
- echo $e->getMessage() . \PHP_EOL;
- }
- try {
- var_dump(property_exists(25,'empty'));
- } catch (\TypeError $e) {
- echo $e->getMessage() . \PHP_EOL;
- }
- var_dump(property_exists('',''));
- var_dump(property_exists('A',''));
- var_dump(property_exists('A','123'));
- var_dump(property_exists('A','init'));
- var_dump(property_exists('A','empty'));
- var_dump(property_exists(new A, ''));
- var_dump(property_exists(new A, '123'));
- var_dump(property_exists(new A, 'init'));
- var_dump(property_exists(new A, 'empty'));
- ?>
- --EXPECT--
- ===A===
- obj(A)::$a
- bool(true)
- obj(A)::$b
- bool(true)
- obj(A)::$c
- bool(true)
- obj(A)::$d
- bool(false)
- obj(A)::$e
- bool(true)
- ===GLOBAL===
- obj(A)::$a
- bool(true)
- obj(A)::$b
- bool(true)
- obj(A)::$c
- bool(true)
- obj(A)::$d
- bool(false)
- obj(A)::$e
- bool(true)
- ===A===
- A::$a
- bool(true)
- A::$b
- bool(true)
- A::$c
- bool(true)
- A::$d
- bool(false)
- A::$e
- bool(false)
- ===GLOBAL===
- A::$a
- bool(true)
- A::$b
- bool(true)
- A::$c
- bool(true)
- A::$d
- bool(false)
- A::$e
- bool(false)
- ===B===
- B::$a
- bool(true)
- B::$b
- bool(true)
- B::$c
- bool(true)
- B::$d
- bool(false)
- B::$e
- bool(false)
- ===GLOBAL===
- B::$a
- bool(true)
- B::$b
- bool(true)
- B::$c
- bool(true)
- B::$d
- bool(false)
- B::$e
- bool(false)
- ===C===
- C::$a
- bool(true)
- C::$b
- bool(true)
- C::$c
- bool(false)
- C::$d
- bool(true)
- C::$e
- bool(false)
- ===GLOBAL===
- C::$a
- bool(true)
- C::$b
- bool(true)
- C::$c
- bool(false)
- C::$d
- bool(true)
- C::$e
- bool(false)
- ===C===
- obj(C)::$a
- bool(true)
- obj(C)::$b
- bool(true)
- obj(C)::$c
- bool(false)
- obj(C)::$d
- bool(true)
- obj(C)::$e
- bool(false)
- ===GLOBAL===
- obj(C)::$a
- bool(true)
- obj(C)::$b
- bool(true)
- obj(C)::$c
- bool(false)
- obj(C)::$d
- bool(true)
- obj(C)::$e
- bool(false)
- ===PROBLEMS===
- property_exists(): Argument #1 ($object_or_class) must be of type object|string, null given
- property_exists(): Argument #1 ($object_or_class) must be of type object|string, int given
- bool(false)
- bool(false)
- bool(false)
- bool(true)
- bool(true)
- bool(false)
- bool(false)
- bool(true)
- bool(true)
|