php のリフレクション (多くの情報では説明できません)
1.目的:
この拡張機能は、PHP プログラムを分析し、クラス、メソッド、プロパティ、パラメーターなどに関するコメントを含む詳細情報をエクスポートまたは抽出します。
リフレクションは、PHP ライブラリ関数「Classes/Objects クラス/オブジェクト関数」の拡張であると言えます。
主に既存のPHPプログラム内のクラスやメソッドなどの情報をプログラムを通じて検出し、処理するために使用されます。
2. API の概要:
クラス Reflection { }
インターフェース Reflector { }
クラス ReflectionException extends Exception { }
クラス ReflectionFunction は Reflector を実装します { }
クラス ReflectionParameter は Reflector を実装します { }
クラス ReflectionMethod extends ReflectionFunction { }
クラス ReflectionClass は Reflector を実装します { }
クラスReflectionObject extends ReflectionClass { }
クラス ReflectionProperty は Reflector を実装します { }
class ReflectionExtension は Reflector を実装します { }
3.詳細説明:(例はphpマニュアルを参照)
①Reflectionクラス
class Reflection
{
Public staticmixed export(Reflector r [,bool return])
//クラスやメソッドの詳細情報をエクスポートする
public static array getModifierNames(int modifiers)
//モディファイアの名前を取得します
}
?>
②ReflectionExceptionクラス
このクラスは標準クラスを継承しており、特別なメソッドやプロパティはありません。
③ReflectionFunction class
class ReflectionFunctionimplements Reflector
{
final private __clone()
public object __construct(string name)
public string __toString()
public static string export()
//関数をエクスポートする 詳細information
public string getName()
//関数名を取得
public bool isInternal()
//システム内部関数かどうかをテスト
public bool isUserDefined()
//それがユーザー定義関数かどうかをテスト
public string getFileName()パラメータリストを介して
PublicmixedinvokeArgs(array args)
//この関数は配列を介してパラメータを渡します
public bool returnsReference()
//関数が参照を返すかどうかをテストします
public ReflectionParameter[] getParameters()
//このメソッドに必要なパラメータを取得し、戻り値はオブジェクト配列になります
public int getNumberOfParameters () 取得 // このメソッドに必要なパラメータの数を取得します
Public int GetnumberofrequiredParameters ()
// このメソッドに必要なパラメータを取得します
}? & Gt; ReflectionParameter Implements Reflector {
Final Private __Clone ()
Public Object __Construct (String name)
Public String ()
Public string export ()
// パラメータをエクスポートする詳細
Public String GetName ()
// パラメータ名を取得します
Public bool isPassedByReference()
// パラメータが参照渡しかどうかをテストします
Public ReflectionClass getClass()
// パラメータがオブジェクトの場合は、オブジェクトのクラス名を返します
Public bool isArray ()
// パラメーターが配列型であるかどうかをテストします
public bool allowedNull()
// パラメーターが null であることが許可されているかどうかをテストします
public bool isOptional()
// パラメーターがオプションであるかどうかをテストします。はデフォルトパラメータです
public bool isDefaultValueAvailable()
;⑤ReflectionClassクラス:
class ReflectionClassimplements Reflector
{
final private __clone()
public object __construct(string name)
public string __toString()
public static string export()
//このクラスの詳細をエクスポートInformation
Public string getName()
//クラス名またはインターフェイス名を取得します
Public bool isInternal()
//クラスがシステム内部クラスかどうかをテストします
Public bool isUserDefined()
//クラスがユーザーかどうかをテストします-define Class
Public bool isInstantiable()
//クラスがインスタンス化されているかどうかをテストします
Public bool hasConstant(string name)
//クラスが特定の定数を持っているかどうかをテストします
Public bool hasMethod(string name)
//Test the class クラスには特定のメソッドがありますか? public bool hasProperty(string name)
)
// このクラスの開始を取得します。 // このクラスのコンストラクター情報を取得します
Public ReflectionMethod getMethod(string name)
getProperty(string) name)
//特定のプロパティ情報を取得
public ReflectionProperty[] getProperties()
//このクラスの全プロパティ情報を取得
public array getConstants()
publicmixed getConstant(string name)
//特定の定数情報を取得このクラスの
Public ReflectionClass[] getInterfaces()
// インターフェイス クラスの情報を取得します
public bool isInterface()
// クラスがインターフェイスであるかどうかをテストします
public bool isAbstract( )
// クラスがインターフェイスであるかどうかをテストしますabstract class
public bool isFinal()
// クラスがfinalとして宣言されているかどうかをテストする
public int getModifiers()
‐
//Reflection::getModifierNames($class->getModifiers()) をさらに読んでください
public bool isInstance(stdclass object)
//受信オブジェクトがクラスのインスタンスであるかどうかをテストします
public stdclass newInstance(mixed * args)
//このクラスのインスタンスを作成します
public ReflectionClass getParentClass()
//親クラスを取得します
public bool isSubclassOf(ReflectionClass class)
//受信クラスがこのクラスの親クラスかどうかをテストします
public array getStaticProperties( )
//このクラスのすべての静的プロパティを取得します
Publicmixed getStaticPropertyValue(string name [,mixeddefault ])
//このクラスの静的プロパティ値を取得します。プライベートの場合はアクセスできません
Public void setStaticPropertyValue(文字列名, 混合値)
//このクラスの静的プロパティ値を設定します。プライベートの場合はアクセスできません。アクセスできないため、カプセル化の原則に違反します
public array getDefaultProperties()
//静的プロパティを除く、このクラスのプロパティ情報を取得します
public bool isIterateable()
public boolimplementsInterface(string name)
//特定のインターフェイスかどうかをテストします実装されています
public ReflectionExtension getExtension()
public string getExtensionName()
}
?>
⑥ReflectionMethod クラス:
class ReflectionMethod extends ReflectionFunction
{
Public __construct(混合クラス, 文字列名)
public string __toString()
public static string export()
//このメソッドに関する情報をエクスポートします
publicmixed invoke(stdclass object,mixed* args)
//このメソッドを呼び出します
publicmixedinvokeArgs(stdclass object, array args)
//このメソッドを呼び出し、複数のパラメータを渡します
public bool isFinal()
// メソッドが Final かどうかをテストします
public bool isAbstract()
// メソッドが抽象かどうかをテストします
public bool isPublic()
// Method メソッドは public ですか? public bool isPrivate()
public bool isConstructor()
//メソッドがコンストラクターかどうかをテストします
public bool isDestructor()
//メソッドがデストラクターかどうかをテストします
public int getModifiers()
//メソッドの修飾子を取得します
public ReflectionClass getDeclaringClass()
//このメソッドが属するクラスを取得します
// ReflectionFunction から継承
Final private __clone()
public string getName()
public bool isInternal()
public bool isUserDefined()
public string getFileName()
public int getStartLine()
public int getEndLine()
public string getDocComment()
public array getStaticVariables()
public bool returnsReference()
public ReflectionParameter[] getParameters()
public int getNumberOfPparameters()
public int getNumberOfRequiredParameters()
}
?>
⑦ReflectionProperty クラス:
class ReflectionProperty はリフレクターを実装します
{
final private __clone()
public __construct(混合クラス、文字列名)
public string __toString()
public static string export()
// プロパティの詳細情報をエクスポートします
public string getName()
// プロパティの名前を取得します
public bool isPublic()
です。 name private? public bool isProtected()
/修飾子を取得する
PublicmixedgetValue(stdclass object)
//属性値を取得する
Public void setValue(stdclass object,mixed value)
//属性値を設定する
Public ReflectionClass getDeclaringClass ()
//属性の定義を取得します Class
public string getDocComment()
//この属性のコメントを取得します
}
?>
⑧ReflectionExtension class
class ReflectionExtensionimplements Reflector {
Final private __clone()
public __construct(string name)
public string __toString()
public static string export()
//拡張機能に関するすべての情報をエクスポートします
public string getName()
//拡張機能の名前を取得します
public string getVersion()
//拡張機能のバージョンを取得します
Public ReflectionFunction[] getFunctions()
//拡張機能のすべての関数を取得します
Public array getConstants()
//拡張機能のすべての定数を取得します
Public array getINIEntries( )
//phpの拡張子関連を取得 .iniのコマンド情報
パブリック ReflectionClass[] getClasses()
public array getClassNames()
}
?>
4.添付ファイル:
実際、2 番目の API 概要からわかるように、インターフェイスは非常に使いやすいです。
一方で、Reflector インターフェースは、Reflection 小規模システムに適切なインターフェース命名規則を提供します。
外部から見ると、この小規模システムの API は非常に統一されています。
一方、多くのクラスは Reflector インターフェースを実装しているため、
このようなクラス階層ではポリモーフィズムを実装するのが非常に簡単です。