反省の理解
PHP の実行状態で PHP プログラムの分析を拡張し、クラス、メソッド、属性、パラメーターなどの詳細情報、さらにはコメントをエクスポートまたは抽出することを指します。この動的に情報を取得し、オブジェクトのメソッドを動的に呼び出す機能をリフレクションAPIと呼びます。リフレクションは、オブジェクト指向モデルのメタモデルを操作するための API であり、非常に強力で、複雑でスケーラブルなアプリケーションの構築に役立ちます。 (追記: ファクトリーモードでの使用を含む)
Reflection API は、PHP の組み込み oop テクノロジ拡張機能であり、いくつかのクラス、例外、インターフェイスを一緒に使用すると、他のクラス、インターフェイス、メソッド、プロパティ、拡張機能の分析に役立ちます。これらの oop 拡張はリフレクションと呼ばれます。
リフレクションクラス
[php]
クラス ReflectionClass はリフレクターを実装します
{
最終プライベート __clone()
パブリックオブジェクト __construct(文字列名)
パブリック文字列 __toString()
パブリック静的文字列エクスポート()
//このクラスの詳細情報をエクスポートします
パブリック文字列 getName()
//クラス名またはインターフェース名を取得します
パブリックブール isInternal()
//このクラスがシステムの内部クラスかどうかをテストします
パブリックブール isUserDefined()
//クラスがユーザー定義クラスかどうかをテストします
パブリックブール isInstantiable()
//クラスがインスタンス化されているかどうかをテストします
public bool hasConstant(文字列名)
//クラスに特定の定数があるかどうかをテストします
public bool hasMethod(文字列名)
//このクラスに特定のメソッドがあるかどうかをテストします
public bool hasProperty(文字列名)
//クラスに特定の属性があるかどうかをテストします
パブリック文字列 getFileName()
//パス名を含む、このクラスを定義するファイル名を取得します
パブリック int getStartLine()
//このクラスを定義する開始行を取得します
パブリック int getEndLine()
//このクラスを定義する終了行を取得します
パブリック文字列 getDocComment()
//このクラスのコメントを取得します
パブリック ReflectionMethod getConstructor()
//このクラスのコンストラクター情報を取得します
パブリック ReflectionMethod getMethod(文字列名)
//このクラスの特定のメソッド情報を取得します
パブリック ReflectionMethod[] getMethods()
//このクラスのすべてのメソッド情報を取得します
パブリック ReflectionProperty getProperty(文字列名)
//特定の属性情報を取得します
パブリック ReflectionProperty[] getProperties()
//このクラスのすべての属性情報を取得します
パブリック配列 getConstants()
//このクラスのすべての定数情報を取得します
パブリック混合 getConstant(文字列名)
//このタイプの特定の定数情報を取得します
パブリック ReflectionClass[] getInterfaces()
//インターフェースクラス情報を取得します
パブリックブール isInterface()
//クラスがインターフェースかどうかをテストします
パブリックブール isAbstract()
//クラスが抽象クラスかどうかをテストします
パブリックブール isFinal()
//クラスがfinalと宣言されているかどうかをテストします
パブリック int getModifiers()
//このクラスの修飾子を取得します。戻り値の型はリソース型である可能性があります
//Reflection::getModifierNames($class->getModifiers()) をさらに読んでください
パブリックブール isInstance(stdclass オブジェクト)
//渡されたオブジェクトがこのクラスのインスタンスであるかどうかをテストします
パブリック stdclass newInstance(混合* 引数)
//このクラスのインスタンスを作成します
パブリック ReflectionClass getParentClass()
//親クラスを取得します
パブリックブール isSubclassOf(ReflectionClass クラス)
//渡されたクラスがこのクラスの親クラスかどうかをテストします
パブリック配列 getStaticProperties()
//このクラスのすべての静的プロパティを取得します
パブリック混合 getStaticPropertyValue(文字列名 [, 混合デフォルト])
//このクラスの静的属性値を取得します。プライベートの場合はアクセスできません
Public void setStaticPropertyValue(文字列名, 混合値)
//このクラスの静的属性値を設定します。プライベートの場合、アクセスできず、カプセル化の原則に違反します
パブリック配列 getDefaultProperties()
//このクラスの静的属性を除く属性情報を取得します
パブリックブール isIterateable()
public boolimplementsInterface(文字列名)
//特定のインターフェースが実装されているかどうかをテストします
パブリック ReflectionExtension getExtension()
パブリック文字列 getExtensionName()
}
?>
ファクトリーモードアプリケーション:
[php]
クラスMoveDataFactory
{
/**
* 説明: シンプルなファクトリーモード、モードに従って異なるインスタンス化されたオブジェクトを選択します
* @return オブジェクト インスタンス
*/
パブリック関数 GetMoveClass($classname)
{
$reflectionclass = 新しい ReflectionClass($classname);
return $reflectionclass->newInstance();
}
}
http://www.bkjia.com/PHPjc/477934.html