"上記の記事では、make メソッドの実行後に返されるインスタンスを分析しました。この記事では、invokeClass メソッドについて詳しく分析します。
"
invokeClass メソッドの詳細な分析 (リフレクションの使用)
#上記のコード フローを読んだことがあっても、上記のフローチャートを読んだことがあっても、次の点を理解しておく必要があります。最終的なコードは、メソッドinvokeClass
がこのメソッドです。
このメソッドのすべての知識ポイントはリフレクションの使用に基づいています。方法がわからない場合は、上記の記事または以前の記事を読んでください。
invokeClass
メソッドで最も重要なのは、パラメーターをバインドするメソッド bindParams
であり、このメソッドでもリフレクションが使用されます。
したがって、コンテナ内のリフレクションの役割については、あまり説明する必要はありません。
その前に説明しなければならないのですが、この__makeメソッドを見たときにすごく思い出しました!
前回のコンフィグのソースコード構成の学習記事では、その時点で蓄積されていたナレッジポイントやフレームワークコードの実行処理がまだ__makeメソッドを説明する段階ではなかったため、このメソッドは一旦飛ばしました。
コンテナ内の__makeメソッドの役割を詳しく説明します。
reflect 変数の値を出力すると、以下に示すように 2 つのリフレクション クラス オブジェクトが返されます。
コード$reflect->hasMethod('__make')
このリフレクションクラスに__make関数があるかどうかを判定します
コード$method = new ReflectionMethod($class, '__make');
リフレクション クラスを実行するメソッドです。ここでは __make メソッドを指します。
ブレークポイントに到達すると、このメソッドは2 つの既存の __make リフレクション クラスを返します。これは、ブレークポイントにより 2 つのリフレクション クラスのみが表示されるためです。
ここでは主に think\Config について説明します。
コードの最後の行$method->isPublic() && $method->isStatic()
はメソッドがパブリックかどうかの判断です メソッドが静的かどうかを判断します
この行は $args = $this->bindParams($method, $vars);# になるまで入力されません
##bindParams メソッドを使用すると、以下の詳細な分析も行われます。
“学習への粘り強さ、ブログへの継続性、そして共有への粘り強さは、カカがそのキャリア以来常に支持してきた信念です。巨大なインターネット上のカカの記事があなたに何かをもたらすことを願っています。少しお手伝いします。私はカカです。また次回お会いしましょう。
”
以上がThinkPHP コンテナーでのリフレクションの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。