ホームページ > バックエンド開発 > PHPチュートリアル > PHPのリフレクションクラスReflectionClass、ReflectionMethodの使用例、reflectionmethod_PHPチュートリアル

PHPのリフレクションクラスReflectionClass、ReflectionMethodの使用例、reflectionmethod_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:21:26
オリジナル
984 人が閲覧しました

PHPのリフレクションクラスReflectionClass、ReflectionMethodの使用例、reflectionmethod

PHP5 には完全なリフレクション API があり、クラス、インターフェイス、関数、メソッド、拡張機能をリバース エンジニアリングする機能が追加されています。

リフレクションとは何ですか?

PHPの実行状態でPHPプログラムの解析を拡張し、クラス、メソッド、プロパティ、パラメータなどの詳細情報をコメントも含めてエクスポートまたは抽出することを指します。この動的に情報を取得し、オブジェクトのメソッドを動的に呼び出す機能をリフレクションAPIと呼びます。リフレクションは、オブジェクト指向パラダイムでメタモデルを操作するための API であり、非常に強力で、複雑でスケーラブルなアプリケーションの構築に役立ちます。

その用途には、プラグインの自動ロード、ドキュメントの自動生成が含まれ、PHP 言語の拡張にも使用できます。

PHP リフレクション API は、プログラムのメタデータにアクセスしたり、関連する注釈と対話したりするのに役立ついくつかのクラスで構成されています。リフレクションの助けを借りて、クラスによって実装されたメソッドを取得し、クラスのインスタンスを作成し (new による作成とは異なります)、メソッドを呼び出し (これも通常の呼び出しとは異なります)、パラメーターを渡し、静的メソッドを動的に呼び出すことができます。クラスのメソッド。
Reflection API は、いくつかのクラス、例外、インターフェイスを含む PHP の組み込み OOP テクノロジ拡張機能であり、これらを一緒に使用すると、他のクラス、インターフェイス、メソッド、プロパティ、メソッド、拡張機能の分析に役立ちます。これらの OOP 拡張はリフレクションと呼ばれます。

通常は、ReflectionClass クラスと ReflectionMethod クラスを使用します。例:

コードをコピーします コードは次のとおりです:

クラス人 {

/**
  * デモンストレーションのために、これを非公開に設定します
 */
プライベート $_allowDynamicAttributes = false;

/**
  * type=primary_autoincrement
 */
保護された $id = 0;

/**
  * type=varchar length=255 null
 */
保護された $name;

/**
  * type=text null
 */
保護された $biography;

パブリック関数 getId() {
$this->id;
を返します }

パブリック関数 setId($v) {
$this->id = $v;
}

パブリック関数 getName() {
$this->name;
を返します }

パブリック関数 setName($v) {
$this->name = $v;
}

パブリック関数 getBiography() {
$this->経歴を返す;
}

パブリック関数 setBiography($v) {
$this->略歴 = $v;
}
}

1. ReflectionClass を通じて、Person クラスの次の情報を取得できます。 1.定数

2.プロパティのプロパティ名

3. メソッドのメソッド名 static
4. プロパティの静的プロパティ
5. 名前空間
6. Personクラスがfinalかabstractか
7. Personクラスには特定のメソッドがありますか

次にそれを反映するには、クラス名「person」を ReflectionClass に渡すだけです:


コードをコピーします コードは次のとおりです:
$class = new ReflectionClass('person') // Person クラスのリフレクション クラスを作成します
; $instance = $class->newInstanceArgs($args) // Person クラスのインスタンス化と同等
;

1) プロパティを取得します:

コードをコピーします コードは次のとおりです:
$properties = $class->getProperties();
foreach ($property として $property) {
echo $property->getName() . "n";
}
// 出力:
// _allowDynamicAttributes
//ID
// 名前
// 略歴


デフォルトでは、ReflectionClass はプライベートおよび保護されたプロパティを含むすべてのプロパティを取得します。プライベート属性のみを取得したい場合は、追加のパラメーターを渡す必要があります:

コードをコピーします コードは次のとおりです:
$private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);


利用可能なパラメータリスト:

コードをコピーします コードは次のとおりです:
ReflectionProperty::IS_STATIC
ReflectionProperty::IS_PUBLIC
ReflectionProperty::IS_PROTECTED
ReflectionProperty::IS_PRIVATE


プロパティ名は $property->getName() を通じて取得できます。

2) コメントを取得します:

getDocComment を通じてプロパティに書き込まれたコメントを取得できます。

コードをコピーします コードは次のとおりです:

foreach ($property として $property) {
if ($property->isProtected()) {
$docblock = $property->getDocComment();
preg_match('/ type=([a-z_]*) /', $property->getDocComment(), $matches);
echo $matches[1] . "n";
}
}
// 出力:
// プライマリ_オートインクリメント
//varchar
// テキスト

3) クラスのメソッドを取得します

コードをコピーします コードは次のとおりです:

getMethods() を使用してクラスのすべてのメソッドを取得します。
hasMethod(string) 特定のメソッドが存在するかどうか
getMethod(string) メソッドを取得します

4) クラスメソッドを実行します:

コードをコピーします コードは次のとおりです:

$instance->getName(); // Person
でメソッドgetNameを実行します。 // または:
$method = $class->getmethod('getName') // Person クラスの getName メソッドを取得します
; $method->invoke($instance); // getNameメソッドを実行します
// または:
$method = $class->getmethod('setName') // Person クラスの setName メソッドを取得します
; $method->invokeArgs($instance, array('snsgou.com'));

2. ReflectionMethod を通じて、Person クラスのメソッドに関する情報を取得できます:

1. 「パブリック」、「保護」、「プライベート」、または「静的」タイプかどうか
2.メソッドのパラメータリスト
3. メソッドのパラメータの数
4. クラスのメソッドのアンチコール

コードをコピーします コードは次のとおりです:

//詳細メソッドを実行
$method = new ReflectionMethod('人', 'テスト');

if ($method->isPublic() && !$method->isStatic()) {
echo 'アクションは正しい';
}
echo $method->getNumberOfParameters() // パラメータの数
; echo $method->getParameters(); // パラメータオブジェクト配列

クラスのアノテーションを取得するためのphpリフレクション

array_push($_FILES[

phpコードの問題

これは単なるパラメータの受け渡しであり、このクラスは ReflectionMethod クラスの定義に準拠しています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/858747.html技術記事 PHP のリフレクション クラス ReflectionClass、ReflectionMethod の使用例、reflectionmethod PHP5 には完全なリフレクション API があり、クラス、インターフェイス、関数、メソッド、拡張機能のリバース エンジニアリングが追加されています...
関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート