<? class Hoge { static $foo = 1; static $bar = 2; static $baz = 3; public $hoge = 4; public $fuga = 5; public $piyo = 6; private $aaa = 7; private $bbb = 8; private $ccc = 9; protected $ddd = 10; protected $eee = 11; protected $fff = 12; }
このクラスの変数をぜんぶ見たい! ぜんぶ!
静的プロパティを見る
静的プロパティの一覧を取得する関数があるので、それを使うだけ
<? $ref = new ReflectionClass('Hoge'); $list = $ref->getStaticProperties(); foreach($list as $k => $v) echo "$k => $v\n"; /* foo = 1 bar = 2 baz = 3
publicなプロパティを見る
動的プロパティの一覧を取得する関数があるので、それを使うだけ
<? $o = new Hoge(); $list = get_object_vars($o); foreach($list as $k => $v) echo "$k = $v\n"; /* hoge = 4 fuga = 5 piyo = 6
privateなプロパティを見る
ReflectionClass を使うと、クラス情報を取得できる。
で、getProperties() を使うと プロパティ情報(ReflectionProperty)のリストを取得できる。
<? $o = new Hoge(); $ref = new ReflectionClass($o); $props = $ref->getProperties(ReflectionProperty::IS_PRIVATE); $list = []; foreach($props as $p){ $p->setAccessible(true); // PHP8.1からは不要 $list[$p->getName()] = $p->getValue($o); } foreach($list as $k => $v) echo "$k = $v\n"; /* aaa = 7 bbb = 8 ccc = 9
protectedなプロパティを見る
やり方はprivateとまったく同じ
<? $o = new Hoge(); $ref = new ReflectionClass($o); $props = $ref->getProperties(ReflectionProperty::IS_PROTECTED); $list = []; foreach($props as $p){ $p->setAccessible(true); // PHP8.1からは不要 $list[$p->getName()] = $p->getValue($o); } foreach($list as $k => $v) echo "$k = $v\n"; /* ddd = 10 eee = 11 fff = 12
PHPではprivate変数でもなんでも覗き放題なので、privateなんか全然意味ねーな