ホームページ >バックエンド開発 >PHPチュートリアル >PHPリフレクション(Reflection)の使用例_PHPチュートリアル
この記事では主に PHP Reflection の使用例を紹介します。この記事では、ReflectionClass、ReflectionExtension、ReflectionFunction、ReflectionMethod、ReflectionObject、ReflectionParameter などのクラスの使用例について説明します。必要な方はご参考ください。
PHP Reflectionは、クラス、拡張機能、メソッド、関数、オブジェクト、パラメータ、プロパティの詳細情報を取得するために使用されます。ReflectionClassクラスは、属性、メソッド、ドキュメントコメントの取得など、クラス関連の情報を取得します。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
クラスの人{ /** * デモンストレーションのために、これを非公開に設定します */ private $_allowDynamicAttributes = false;
/**type=primary_autoincrement*/ 保護された $id = 0;
/**タイプ=varchar 長さ=255 null*/ 保護された $name;
/**type=text null*/ 保護された $biography;
パブリック関数 getId() { $this->id;を返す } パブリック関数 setId($v) { $this->id = $v; } パブリック関数 getName() { $this->名前を返す; } パブリック関数 setName($v) { $this->名前 = $v; } パブリック関数 getBiography() { $this-> 経歴を返す; } パブリック関数 setBiography($v) { $this->略歴 = $v; } }
//クラスをエクスポートする ReflectionClass::export('人');
$r = 新しい ReflectionClass('人');
//すべての属性を取得します print_r($r->getProperties());
/** * 指定された属性を取得します * ReflectionProperty::IS_STATIC * ReflectionProperty::IS_PUBLIC * ReflectionProperty::IS_PROTECTED * ReflectionProperty::IS_PRIVATE */ print_r($r->getProperties(ReflectionProperty::IS_PRIVATE));
//コメントを取得します print_r($r->getProperty('id')->getDocComment());
//取得方法 print_r($r->getMethods());
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$re = 新しい ReflectionExtension('Reflection'); print_r($re->getClasses()) //すべての拡張クラス print_r($re->getClassNames()) //すべてのクラス名を展開します
$dom = 新しい ReflectionExtension('mysql'); print_r($dom->getConstants());//拡張定数 print_r($dom->getDependency());//この拡張機能は に依存しますprint_r($dom->getFunctions());//拡張メソッド print_r($dom->getINIEntries());//拡張ini情報 print_r($dom->getName());//拡張機能名 print_r($dom->getVersion());//拡張バージョン print_r($dom->info());//拡張情報 print_r($dom->isPersistent());//永続的な拡張機能かどうか print_r($dom->isTemporary()) //一時的な拡張ですか |
ReflectionFunction クラスを使用すると、関数関連の情報を取得できます
?
1 2 3 4 5 |
$rf = 新しい ReflectionFunction('array_merge');
foreach($rf->getParameters() as $item) { echo $item .PHP_EOL; } |
ReflectionMethodクラスの利用者がメソッド関連情報を取得します
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
クラスの人{
パブリック $name;
/** * 人の名前を取得します */ パブリック関数 getName() { $this->名前を返す; } パブリック関数 setName($v) { $this->名前 = $v; } }
$rm = 新しい ReflectionMethod('人', 'getName');
print_r($rm->isPublic()); print_r($rm->getDocComment()); |
オブジェクト関連の情報を取得するためにReflectionObjectクラスを使用します
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
クラスの人{
パブリック $name;
パブリック関数 __construct($name) { $this->name = $name; }
パブリック関数 getName() { $this->名前を返す; }
パブリック関数 setName($v) { $this->名前 = $v; } }
$a = 新しい人('a');
$ro = 新しい ReflectionObject($a);
print_r($ro->getMethods()); |
ReflectionParameter 関数またはメソッドのパラメータに関する情報を取得します。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
クラスの人{
パブリック $name;
パブリック関数 __construct($name) { $this->name = $name; }
パブリック関数 getName() { $this->名前を返す; }
パブリック関数 setName($v) { $this->名前 = $v; } }
$p = new ReflectionParameter(array('person', 'setName'), 0);
print_r($p->getPosition()); //0 print_r($p->getName()); //v |
ReflectionProperty クラスのプロパティに関する情報を取得します。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
クラスの人{
/**テスト*/ パブリック $name;
パブリック関数 __construct($name) { $this->name = $name; }
パブリック関数 getName() { $this->名前を返す; }
パブリック関数 setName($v) { $this->名前 = $v; } }
$p = new ReflectionProperty('人', '名前');
print_r($p->getDocComment()); |