PHP の拡張リフレクション クラスは、PHP プログラムを分析し、クラス、メソッド、プロパティ、パラメーターなどに関するコメントを含む詳細情報をエクスポートまたは抽出するために使用されます。
次のような質問を見てください。PHP クラスのメンバー変数はクラス内で宣言されませんが、関数内で宣言されます。その違いは何ですか?
コードをコピーします コードは次のとおりです:
class test{
private $name;
private $sex;
function __construct(){
$this->aaa='aaa';
}
}
$test=new test();
$reflect=new ReflectionClass($test);
$pro=$reflect->getDefaultProperties();
print_r($pro);// 結果を出力: Array ( [name ] => [sex] => )
echo $test->aaa;//出力結果: aaa
このテストクラスでは、2 つのメンバー変数 $name と $sex が宣言されています。しかし、コンストラクターでは、別の変数 $aaa が宣言され、クラスが初期化され、デフォルトのメンバー属性を出力するためにリフレクション クラスが使用されます。宣言されたメンバー変数属性は 2 つだけですが、出力クラスの $aaa 変数はまだ結果を出力できます。
すみません、クラスのメンバ変数は関数内で宣言しなくても大丈夫ですか?
あなたの例では、クラスがインスタンス化されるときにのみ __construct が実行されるため、ReflectionClass の使用は不適切です。
つまり、ReflectionClass は、クラスがインスタンス化された後の構造ではなく、リフレクション クラスが宣言されたときの構造であるため、属性 aaa が存在しないため、属性 aaa が出力されないのは正しいことです (クラスが宣言されます)。
では、属性 aaa を表示するにはどうすればよいでしょうか?
コードをコピー のように、ReflectionObject を使用する必要があります。 コードは次のとおりです:
class test{
private $name ;
プライベート $sex ;
function __construct(){
$this->aaa='aaa';
}
}
$test=new test();
$reflect=new ReflectionObject($test);
$pro=$reflect ->getProperties();
print_r($pro);
属性 aaa はインスタンス化されるまで存在しません。そうすると、属性 aaa が表示されます。PHP は「動的」言語であるため、クラス化可能 メンバー変数は宣言する必要がなく、関数内で宣言できます。
http://www.bkjia.com/PHPjc/825185.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/825185.html技術記事 PHP の拡張リフレクション クラスは、PHP プログラムを分析し、クラス、メソッド、プロパティ、パラメーターなどに関するコメントを含む詳細情報をエクスポートまたは抽出するために使用されます。 このような質問を見てください、php クラス...