ホームページ  >  記事  >  バックエンド開発  >  PHP リフレクション クラス ReflectionClass および ReflectionObject_PHP の使用方法のチュートリアル

PHP リフレクション クラス ReflectionClass および ReflectionObject_PHP の使用方法のチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:25:091353ブラウズ

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.comtru​​ehttp://www.bkjia.com/PHPjc/825185.html技術記事 PHP の拡張リフレクション クラスは、PHP プログラムを分析し、クラス、メソッド、プロパティ、パラメーターなどに関するコメントを含む詳細情報をエクスポートまたは抽出するために使用されます。 このような質問を見てください、php クラス...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。