前回の記事「手書きPHP APIフレームワーク:Composerのインストールと使い方(2)」ではComposerのインストールと使い方を紹介しましたが、今回はリフレクションの概念について紹介します。
熟考、直観的理解とは、到着地に基づいて出発地と発信源を見つけることです。リフレクションとは、PHP の実行状態で PHP プログラムの分析を拡張し、クラス、メソッド、プロパティ、パラメーターなどに関するコメントを含む詳細情報をエクスポートまたは提案することを指します。この動的に情報を取得し、オブジェクトのメソッドを動的に呼び出す機能をリフレクションAPIと呼びます。
まずデモを見てみましょう:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
|
出力:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
|
デモでは ReflectionClass クラスが使用されています。もちろん、ReflectionClass クラスはこれらの方法に限定されません。
その他のメソッド
ReflectionClass クラスにはさらに多くのメソッドがあります:
#メソッド説明##ReflectionClass::__constructReflectionClass::exportReflectionClass::getConstant#ReflectionClass::getConstants#ReflectionClass::getConstructorクラスのコンストラクターを取得しますReflectionClass::getDefaultPropertiesデフォルトのプロパティを取得しますReflectionClass::getDocCommentドキュメント コメントの取得ReflectionClass::getEndLine最終行の行番号の取得 ReflectionClass::getExtension定義されたクラスに基づいて拡張機能の ReflectionExtension オブジェクトを取得しますReflectionClass::getExtensionName拡張機能の名前を取得します定義されたクラスの場所ReflectionClass::getFileName定義クラスのファイル名を取得しますReflectionClass: :getInterfaceNamesインターフェイス名を取得ReflectionClass::getInterfacesインターフェイスを取得ReflectionClass:: getMethodクラス メソッドの ReflectionMethod を取得します。 ReflectionClass::getMethodsメソッドの配列を取得するReflectionClass::getModifiersGetクラス ModifiersReflectionClass::getNameクラス名の取得#ReflectionClass::getNamespaceName 名前空間の名前を取得しますReflectionClass::getParentClass親クラスを取得しますReflectionClass::getPropertiesプロパティのセットを取得するReflectionClass::getPropertyクラスのプロパティの ReflectionProperty を取得するReflectionClass::getReflectionConstantクラスの定数の ReflectionClassConstant を取得しますReflectionClass::getReflectionConstantsクラス定数を取得しますReflectionClass::getShortName短縮名を取得しますReflectionClass::getStartLine開始行番号を取得しますReflectionClass::getStaticProperties静的プロパティの取得静的プロパティの値の取得特性エイリアスの配列を返します戻り値 このクラスで使用される特性の名前の配列このクラスで使用される特性の配列を返します定数が定義されているかどうかを確認してくださいメソッドが定義されているかどうかを確認してください定義済みプロパティが定義されているかどうかを確認します##ReflectionClass::implementsInterfaceインターフェースの実装ReflectionClass::inNamespace名前空間にあるかどうかを確認します#ReflectionClass::isCloneableクラスがコピーできるかどうかを返します#ReflectionClass::isFinalReflectionClass::isInstance##ReflectionClass::isInstantiableクラスがインスタンス化可能かどうかを確認するReflectionClass::isInterfaceクラスがインターフェイスであるかどうかを確認するクラスが内部的に定義されている拡張機能またはコアによって表されているかどうかを確認します。 このクラスかどうかを確認しますis iterableiterable(反復可能)かどうかを確認しますサブクラスかどうかを確認する特性であるかどうかを返しますユーザーによって定義されているかどうかを確認します指定されたパラメーターから新しいクラス インスタンスを作成します##ReflectionClass::newInstanceArgs指定されたパラメーターから新しいクラス インスタンスを作成します。 ReflectionClass::newInstanceWithoutConstructorコンストラクターを呼び出さずに新しいクラス インスタンスを作成しますReflectionClass:: setStaticPropertyValue静的プロパティの値を設定しますReflectionClass::__toStringReflectionClass オブジェクトの文字列表現を返します。強力な ReflectionClass に加えて、Reflection、ReflectionClassConstant、ReflectionMethod、ReflectionFunctionAbstract などもあります。マニュアルを確認することをお勧めします:
Reflection の実践的な応用
リフレクションをサポートする言語は、低環境では実装が難しいいくつかのランタイム機能を提供します。 -レベル言語 。
学習コストが高い。リフレクション指向プログラミングでは、より一般的なコード実行を利用するために、フレームワーク、リレーショナル マッピング、オブジェクト インタラクションなど、より高度な知識が必要です。
また、リフレクションの概念と構文は比較的抽象的であるため、過剰な知識が必要になります。リフレクション テクノロジを乱用すると、他の人がコードを読みにくくなり、協力やコミュニケーションに役立ちません
リフレクションにより、操作効率が少し犠牲になりますが、コードの柔軟性が向上します。一定量の消費があります
このセクションは比較的独立しているため、後続の章で使用します。
」
ReflectionClass クラスを初期化する | |
クラスのエクスポート | |
定義の取得定数 | |
定数のセットを取得 | |
##ReflectionClass::getStaticPropertyValue | |
ReflectionClass::getTraitAliases | |
ReflectionClass::getTraitNames | |
ReflectionClass::getTraits | |
ReflectionClass::hasConstant | |
ReflectionClass::hasMethod | |
#ReflectionClass::hasProperty | |
##ReflectionClass:: isAbstract | クラスが抽象クラスかどうかを確認します。 Class (abstract) |
ReflectionClass::isAnonymous | クラスが匿名クラスかどうかを確認します |
クラスはfinalと宣言されています | |
クラスのインスタンスを確認してください | |
ReflectionClass::isInternal | |
ReflectionClass::isIterable | |
ReflectionClass::isIterateable | |
ReflectionClass::isSubclassOf | |
ReflectionClass::isTrait | |
ReflectionClass::isUserDefined | |
ReflectionClass::newInstance | |
以上が手書きPHP APIフレームワークのリフレクション入門(3)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。