ホームページ >バックエンド開発 >PHPチュートリアル >PHPリフレクションの使用例とPHPリフレクションの中国語説明 API_PHPチュートリアル

PHPリフレクションの使用例とPHPリフレクションの中国語説明 API_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:26:27848ブラウズ

最近、開発プロセス中に、特定のクラスメソッドのパラメータの番号、名前、順序を取得する必要があり、パラメータの名前に基づいて $_GET から値を取得できます。

メソッドのプロトタイプが test($uid,$score) の場合、$_GET から取得する必要があることがわかります

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

$uid = $_GET['uid'];

$スコア = $_GET['スコア'];

次にメソッド $obj->test($uid,$score) を呼び出します

もちろん、パラメータ名が合意されており、get メソッドで渡される値変数の名前が一貫していることが前提となります。

PHPのリフレクションAPIを利用して、関数のパラメータ名とパラメータのデフォルト値を取得する方法は以下の通りです。

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

クラステストクラス{

パブリック関数 testFunc($param1,$param2=0){
                                            }
}

$method = 新しい ReflectionMethod('testClass', 'testFunc'); $params = $method--->getParameters(); foreach ($params として $param) {
echo 'パラメータ名: ' $param->getName(),"n"; If ($param->isOptional()) {
echo 'デフォルト値: ' $param->getDefaultValue(),"n"; }
}




以下は PHP リフレクション API の概要です:
1. 目的:

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

2. API の概要:


コードをコピーします


コードは次のとおりです:

クラス リフレクション { } インターフェースリフレクター { } クラス ReflectionException は Exception { } を拡張します
class ReflectionFunction はリフレクター { } を実装します
class ReflectionParameter はリフレクター { } を実装します
class ReflectionMethod extends ReflectionFunction { }
class ReflectionClass はリフレクター { } を実装します
class ReflectionObject extends ReflectionClass { }
class ReflectionProperty はリフレクター { } を実装します
class ReflectionExtension はリフレクター { } を実装します



3. 詳細な手順: (例については PHP マニュアルを参照)

コードをコピーします


コードは次のとおりです:


①振り返り授業
クラスの振り返り
{
public staticmixedexport(Reflector r [,bool return])
//クラスまたはメソッドの詳細情報をエクスポートします
パブリック静的配列 getModifierNames(int modifiers)
//モディファイアの名前を取得します
}
?>

②ReflectionExceptionクラス

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

③ReflectionFunctionクラス
クラス ReflectionFunction はリフレクターを実装します
{
最終プライベート __clone()
パブリックオブジェクト __construct(文字列名)
パブリック文字列 __toString()
パブリック静的文字列エクスポート()
//この関数の詳細情報をエクスポートします
パブリック文字列 getName()
//関数名を取得
public bool isInternal()
//それがシステムの内部関数であるかどうかをテストします
public bool isUserDefined()
// ユーザー定義関数かどうかをテストします
パブリック文字列 getFileName()
//パス名を含むファイル名を取得します
public int getStartLine()
//関数が定義されている開始行を取得します
public int getEndLine()
//定義された関数の終了行を取得します
パブリック文字列 getDocComment()
//関数のコメントを取得します
パブリック配列 getStaticVariables()
//静的変数を取得します
パブリック混合呼び出し(混合*引数)
//この関数を呼び出し、パラメーター リストを通じてパラメーターを渡します
パブリック混合invokeArgs(配列引数)
//この関数を呼び出し、配列を通してパラメーターを渡します
public bool returnsReference()
//関数が参照を返すかどうかをテストします
public ReflectionParameter[] getParameters()
//このメソッドに必要なパラメータを取得し、戻り値はオブジェクト配列になります
public int getNumberOfParameters()
//このメソッドに必要なパラメータの数を取得します
public int getNumberOfRequiredParameters()
//このメソッドに必要なパラメータの数を取得します
}
?>

④ReflectionParameterクラス:
クラス ReflectionParameter はリフレクターを実装します
{
最終プライベート __clone()
パブリックオブジェクト __construct(文字列名)
パブリック文字列 __toString()
パブリック静的文字列エクスポート()
//このパラメータの詳細情報をエクスポートします
パブリック文字列 getName()
//パラメータ名を取得
public bool isPassedByReference()
//パラメータが参照渡しかどうかをテストします
パブリック ReflectionClass getClass()
//パラメータがオブジェクトの場合は、オブジェクトのクラス名を返します
パブリックブール isArray()
//パラメータが配列型かどうかをテストします
public bool allowedNull()
//パラメータを空にすることが許可されているかどうかをテストします
public bool isOptional()
//パラメータがオプションかどうかをテストします。デフォルトのパラメータがある場合はオプションです
public bool isDefaultValueAvailable()
//このパラメータがデフォルトパラメータかどうかをテストします
パブリック混合getDefaultValue()
//このパラメータのデフォルト値を取得します
}
?>

⑤ReflectionClassクラス:
クラス ReflectionClass はリフレクターを実装します
{
最終プライベート __clone()
パブリックオブジェクト __construct(文字列名)
パブリック文字列 __toString()
パブリック静的文字列エクスポート()
//このクラスの詳細情報をエクスポートします
パブリック文字列 getName()
//クラス名またはインターフェース名を取得します
public bool isInternal()
//このクラスがシステムの内部クラスかどうかをテストします
public bool isUserDefined()
//クラスがユーザー定義クラスかどうかをテストします
public bool isInstantiable()
//クラスがインスタンス化されているかどうかをテストします
public bool hasConstant(文字列名)
//このクラスに特定の定数があるかどうかをテストします
public bool hasMethod(文字列名)
//このクラスに特定のメソッドがあるかどうかをテストします
public bool hasProperty(文字列名)
//クラスに特定の属性があるかどうかをテストします
パブリック文字列 getFileName()
//パス名を含む、このクラスを定義するファイル名を取得します
public int getStartLine()
//このクラスを定義する開始行を取得します
public int getEndLine()
//このクラスを定義する終了行を取得します
パブリック文字列 getDocComment()
//このクラスのコメントを取得します
public ReflectionMethod getConstructor()
//このクラスのコンストラクター情報を取得します
public ReflectionMethod getMethod(文字列名)
//このクラスの特定のメソッド情報を取得します
public ReflectionMethod[] getMethods()
//このクラスのすべてのメソッド情報を取得します
public ReflectionProperty getProperty(文字列名)
//特定の属性情報を取得します
public ReflectionProperty[] getProperties()
//このクラスのすべての属性情報を取得します
パブリック配列 getConstants()
//このクラスのすべての定数情報を取得します
publicmixedgetConstant(文字列名)
//このタイプの特定の定数情報を取得します
public ReflectionClass[] getInterfaces()
//インターフェースクラス情報を取得します
パブリックブール isInterface()
//このクラスがインターフェースかどうかをテストします
public bool isAbstract()
//クラスが抽象クラスかどうかをテストします
パブリックブール isFinal()
//クラスがfinalと宣言されているかどうかをテストします
public int getModifiers()
//このクラスの修飾子を取得します。戻り値の型はリソース型である可能性があります
//Reflection::getModifierNames($class->getModifiers()) をさらに読んでください
public bool isInstance(stdclass オブジェクト)
//渡されたオブジェクトがこのクラスのインスタンスであるかどうかをテストします
public stdclass newInstance(混合*引数)
//このクラスのインスタンスを作成します
public ReflectionClass getParentClass()
//親クラスを取得します
public bool isSubclassOf(ReflectionClass クラス)
//渡されたクラスがこのクラスの親クラスかどうかをテストします
パブリック配列 getStaticProperties()
//このクラスのすべての静的プロパティを取得します
publicmixedgetStaticPropertyValue(文字列名[,混合デフォルト])
//このクラスの静的属性値を取得します。プライベートの場合はアクセスできません
public void setStaticPropertyValue(文字列名, 混合値)
//このクラスの静的属性値を設定します。プライベートの場合はアクセスできず、カプセル化の原則に違反します
パブリック配列 getDefaultProperties()
//このクラスの静的属性を除く属性情報を取得します
public bool isIterateable()
public boolimplementsInterface(文字列名)
//特定のインターフェースが実装されているかどうかをテストします
パブリック ReflectionExtension getExtension()
パブリック文字列 getExtensionName()
}
?>

⑥ReflectionMethodクラス:
クラス ReflectionMethod は ReflectionFunction を拡張します
{
public __construct(混合クラス、文字列名)
パブリック文字列 __toString()
パブリック静的文字列エクスポート()
//このメソッドに関する情報をエクスポートします
publicmixedinvoke(stdclassオブジェクト,mixed*引数)
// このメソッドを呼び出します
publicmixedinvokeArgs(stdclassオブジェクト,配列引数)
//このメソッドを呼び出して複数のパラメータを渡します
パブリックブール isFinal()
//メソッドが最終的なものであるかどうかをテストします
public bool isAbstract()
//メソッドが抽象メソッドかどうかをテストします
public bool isPublic()
//メソッドがパブリックかどうかをテストします
パブリックブール isPrivate()
//メソッドがプライベートかどうかをテストします
public bool isProtected()
//メソッドが保護されているかどうかをテストします
パブリックブール isStatic()
//メソッドが静的かどうかをテストします
public bool isConstructor()
//メソッドがコンストラクターかどうかをテストします
パブリックブール isDestructor()
//メソッドがデストラクターかどうかをテストします
public int getModifiers()
//このメソッドの修飾子を取得します
public ReflectionClass getDeclaringClass()
//このメソッドが属するクラスを取得します
// ReflectionFunction から継承
最終プライベート __clone()
パブリック文字列 getName()
public bool isInternal()
public bool isUserDefined()
パブリック文字列 getFileName()
public int getStartLine()
public int getEndLine()
パブリック文字列 getDocComment()
パブリック配列 getStaticVariables()
public bool returnsReference()
public ReflectionParameter[] getParameters()
public int getNumberOfParameters()
public int getNumberOfRequiredParameters()
}
?>

⑦ReflectionPropertyクラス:
クラス ReflectionProperty はリフレクターを実装します
{
最終プライベート __clone()
public __construct(混合クラス、文字列名)
パブリック文字列 __toString()
パブリック静的文字列エクスポート()
//この属性の詳細情報をエクスポートします
パブリック文字列 getName()
// 属性名を取得します
public bool isPublic()
//プロパティ名がパブリックかどうかをテストします
パブリックブール isPrivate()
// 属性名がプライベートかどうかをテストします
public bool isProtected()
//属性名が保護されているかどうかをテストします
パブリックブール isStatic()
// 属性名が静的かどうかをテストします
パブリックブール isDefault()
public int getModifiers()
//修飾子を取得します
パブリック混合getValue(stdclassオブジェクト)
// 属性値を取得します
public void setValue(stdclass オブジェクト, 混合値)
// 属性値を設定します
public ReflectionClass getDeclaringClass()
//この属性を定義するクラスを取得します
パブリック文字列 getDocComment()
//この属性のコメントを取得します
}
?>

⑧ReflectionExtensionクラス
class ReflectionExtension はリフレクターを実装します {
最終プライベート __clone()
public __construct(文字列名)
パブリック文字列 __toString()

パブリック静的文字列エクスポート()
//拡張機能に関するすべての情報をエクスポートします
パブリック文字列 getName()
//拡張機能の名前を取得します
パブリック文字列 getVersion()
// 拡張機能のバージョンを取得します
public ReflectionFunction[] getFunctions()
//この拡張機能のすべての関数を取得します
パブリック配列 getConstants()
//この拡張機能のすべての定数を取得します
パブリック配列 getINIEntries()
//拡張機能に関連するphp.ini内のコマンド情報を取得します
public ReflectionClass[] getClasses()
パブリック配列 getClassNames()
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/824666.html技術記事最近、開発プロセス中に、特定のクラスメソッドのパラメータの番号、名前、順序を取得する必要があり、パラメータの名前に基づいて $_GET から値を取得できます。 メソッドのプロトタイプが test($uid,$score) の場合、...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。