PHPのリフレクション
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アクションプロパティクラス:
{
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インターフェースを実装しているため、
そのようなクラス階層ではポリモーフィズムの実装が非常に簡単です

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
