PHPのリフレクション

WBOY
WBOYオリジナル
2016-06-23 14:37:081352ブラウズ

1.目的:
PHP プログラムの拡張分析。クラス、メソッド、プロパティ、パラメーターなどに関する詳細情報 (コメントを含む) をエクスポートまたは抽出します。
リフレクションは、PHPライブラリ関数「Classes/Objectsクラス/オブジェクト関数」の拡張であると言えます。
主に既存のPHPプログラム内のクラスやメソッドなどの情報をプログラムを通じて検出し、処理するために使用されます。

2. API の概要:
クラス Reflection { }
インターフェイス Reflector { }
class ReflectionException extends Exception { }
class ReflectionFunction は Reflector を実装します { }
class ReflectionParameter は Reflector { } を実装します
class ReflectionMethod extends ReflectionFunction { }
ReflectclassionClass は Reflector { } を実装します
クラスReflectionObject extends ReflectionClass { }
class ReflectionProperty は Reflector { } を実装します
class ReflectionExtension は Reflector { }を実装します

3.詳細説明:(例はphpマニュアルを参照)
①Reflectionクラス
class Reflection
{
Public staticmixedexport(Reflector r [,bool return])
//クラスやメソッドの詳細情報をエクスポートする
public static array getModifierNames(int modifiers)
//モディファイアの名前を取得します
}
?>

②ReflectionException class

このクラスは標準クラスを継承しており、特別なメソッドやプロパティはありません。

③ReflectionFunction class
class ReflectionFunction は Reflector を実装します
{
final private __clone()
public object __construct(string name)
public string __toString()
public static string export()
// この関数をエクスポートする 詳細情報
public string getName()
//関数名を取得
public bool isInternal()
//システム内部関数かどうかをテスト
public bool isUserDefined()
//それがユーザー定義関数かどうかをテスト
public string getFileName()
//パス名を含むファイル名を取得します
public int getStartLine()
//定義された関数の開始行を取得します
public int getEndLine()
//定義された関数の終了行を取得しますfunction
public string getDocComment()
//関数のコメントを取得します
public array getStaticVariables()
//静的変数を取得します
publicmixed invoke(mixed* args)
//関数を呼び出し、パラメータを渡しますパラメータリスト
publicmixedinvokeArgs(array args)
//この関数は配列を介してパラメータを渡します
public bool returnsReference()
//関数が参照を返すかどうかをテストします
public ReflectionParameter[] getParameters()
//メソッドに必要なパラメータ、戻り値はオブジェクト配列です
public int getNumberOfParameters ()
//このメソッドに必要なパラメータの数を取得します
public int getNumberOfRequiredParameters()
//その数を取得しますこのメソッドに必要なパラメータ
}
?>

④ReflectionParameter class:
class ReflectionParameterimplements Reflector
{
final private __clone()
public object __construct(string name)
public string __toString()
public static string export()
// パラメータの詳細をエクスポートします
public string getName()
// パラメータ名を取得します
public bool isPassedByReference()
// パラメータが参照渡しかどうかをテストします
public ReflectionClass getClass()
//パラメータがオブジェクトの場合、オブジェクトのクラス名を返します
public bool isArray()
// パラメータが配列型かどうかをテストします
public bool allowedNull()
// パラメータが許可されているかどうかをテストしますnull である
public bool isOptional()
//パラメータがオプションであるかどうかをテストする、デフォルト パラメータがある場合はオプション
public bool isDefaultValueAvailable()
//パラメータがデフォルト パラメータであるかどうかをテストする
publicmixed getDefaultValue()
/ /パラメータのデフォルト値を取得します
}
?>

⑤ReflectionClass クラス:
class ReflectionClass は Reflector を実装します
{
final private __clone()
public object __construct(string name)
public string __toString()
public static string export()
//このクラスをエクスポートする 詳細情報
Public string getName()
//クラス名またはインターフェース名を取得する
Public bool isInternal()
//クラスがシステムの内部クラスかどうかをテストする
Public bool isUserDefined()
//クラスがシステムの内部クラスであるかどうかをテストするはユーザー定義です クラスを定義します
Public bool isInstantiable()
//クラスがインスタンス化されているかどうかをテストします
Public bool hasConstant(string name)
//クラスに特定の定数があるかどうかをテストします
Public bool hasMethod(string name)
//クラスに特定のメソッドがあるかどうかをテストします
public bool hasProperty(string name)
//クラスに特定のプロパティがあるかどうかをテストします
public string getFileName()
//クラスを定義するファイルの名前を取得します。パス名
public int getStartLine ()
// このクラスを定義する開始行を取得する
public int getEndLine()
// このクラスを定義する終了行を取得する
public string getDocComment()
/Get を使用してこのクラスのコンストラクタ情報
Public ReflectionMethod getMethod(string name)
//このクラスの特定のメソッド情報を取得
public ReflectionMethod[] getMethods()
//このクラスのすべてのメソッド情報を取得
public ReflectionProperty getProperty(string name)
//特定のプロパティ情報を取得します
public ReflectionProperty[] getProperties()
//このクラスのすべてのプロパティ情報を取得します
public array getConstants()
//このクラスのすべての定数情報を取得します
publicmixed getConstant(string name)
//このクラスの固有の定数情報を取得します
Public ReflectionClass[] getInterfaces()
//インターフェイスのクラス情報を取得します
public bool isInterface()
//クラスがインターフェイスであるかどうかをテストします
public bool isAbstract () // このクラスが抽象クラスかどうかをテストします
Public Bool isfinal ()
// このクラスが fubble int Getmodifiers () として宣言されているかどうかをテストします
// このクラスの修飾子を取得します。戻り値の型はリソース Type である可能性があります
//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(string name, mixed value)
//このクラスの静的プロパティ値を設定します。private の場合、カプセル化の原則に違反するためアクセスできません
Public array getDefaultProperties()
//静的プロパティを除く、このクラスのプロパティ情報を取得します
public bool isIterateable( )
public boolimplementsInterface(string name)
//特定のインターフェースが実装されているかどうかをテストする
public ReflectionExtension getExtension()
public string getExtensionName()
}
?>
I ⑥ReflectionMethod クラス:

& lt ;? PHP
Class ReflectionMethod Extens ReflectionFunction {
public __Construct (mixed class, String name)
public try __tostring ()
Public Static String Export ()
// このメソッドの情報をエクスポート
Public Mixed invoke(stdclass object,mixed* args)
//このメソッドを呼び出します
publicmixedinvokeArgs(stdclass object, array args)
//このメソッドを呼び出して複数のパラメータを渡します
public bool isFinal()
//メソッドがFinal
public bool isAbstract()
//メソッドが抽象かどうかをテスト
public bool isPublic()
//メソッドがパブリックかどうかをテスト
public bool isPrivate()
//メソッドがプライベートかどうかをテスト
public bool isProtected ()
//メソッドが保護されているかどうかをテストします
public bool isStatic()
//メソッドが静的かどうかをテストします
public bool isConstructor()
//メソッドが保護されているかどうかをテストしますconstructor
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( )
public string getDocComment()
public array getStaticVariables()
public bool returnsReference()
public ReflectionParameter[] getParameters()
public int getNumberOfParameters()
public int getNumberOfRequiredParameters()
}
?>

⑦Refleアクションプロパティクラス:

class ReflectionPropertyimplements Reflector
{
final private __clone()
public __construct(mixed class, string name)
public string __toString()
public static string export()
//属性の詳細情報をエクスポート
public string getName()
//属性名を取得します
public bool isPublic()
//プロパティ名がパブリックかどうかをテストします
public bool isPrivate()
//プロパティ名がプライベートかどうかをテストします
public bool isProtected( )
//プロパティ名が保護されているかどうかをテストします
public bool isStatic()
//プロパティ名が静的かどうかをテストします
public bool isDefault()
public int getModifiers()
//Get修飾子
public Mixed getValue(stdclass object)
//プロパティ値を取得します
(stdclassオブジェクト、混合値)
//属性値を設定します
public ReflectionClass getDeclaringClass()
//クラスを取得します属性を定義する
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 内の命令情報を取得します
public ReflectionClass[] getClasses()
public array getClassNames()
}
?>

4.添付ファイル:

実際、2 番目の API 概要からわかるように、インターフェイスは非常に使いやすいです。
一方で、Reflector インターフェースは、Reflection 小規模システムに適切なインターフェース命名仕様を提供します。
外部から見ると、この小規模システムの API はその仕様に従う必要があります。
一方で、多くのクラスがReflectorインターフェースを実装しているため、
そのようなクラス階層ではポリモーフィズムの実装が非常に簡単です

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP Webサービス次の記事:PHP Webサービス