“この記事は主に、各メソッドで __make メソッドがどのように実行されるかを学習することを目的としています。コンテナについて学習したところで、コンテナを使用してどのように呼び出しを行うことができるかについて説明します。構成情報を取得するための構成は? .
”
bindParams メソッドを分析する
次に、bindParams を分析しましょう。 ### 方法。
$reflect
$reflect->getNumberOfParameters( ) リフレクション クラスの対応するメソッドのパラメーターの数を取得します。上記によれば、__makeメソッドです。コンテナ コード内で取得されているメソッドのパラメーターの数は 2 つだけです。1 つは __make メソッド、もう 1 つはリフレクション クラスのコンストラクターです。 現時点では vars 変数を渡すシナリオがないため、当面は学習せずにこのセクションをスキップします。
Code$params = $reflect->getParameters();
もメソッドのパラメーターを取得するためにリフレクションを使用します。
印刷時に表示される結果は 2 つのデータ セットです。
では、この一連のデータはどこから来たのでしょうか。上にスクロールして、$reflect
パラメータが何であるかを確認すると、理解できるでしょう。
think\App このリフレクション クラスには __make メソッドがないため、コンストラクター内のパラメーターが取得されます。
think\Log リフレクション クラスには __make メソッドがあるため、以下に示すように __make のパラメーターが返されます。
think\Log のようなクラスと同様に、 __make メソッドとコンストラクターの両方があり、 bindParams
メソッドを 2 回実行します。これは、まさに下の図のロジックであることを理解してください。
次のステップは、ループ リフレクション クラスで取得したパラメーターです。
パラメータ名を取得し、対応するリフレクションクラスを取得します
最後に、取得したリフレクションクラスをgetObjectParam
メソッドに渡します。
この getObjectParam
メソッドには多くの内容はありません。
$vars
は最初から最後まで空の配列であるため、配列の最初の要素を削除してクロージャであるかどうかを判断する操作は実行されません。
make メソッドは最終的にリターン時に実行されます
その後、make メソッドはコンテナから直接インスタンスを返します
リフレクション クラスが存在する場合__make メソッド、return $method->invokeArgs(null, $args);
が最終的に実行され、リフレクション クラス メソッドがパラメータ
を使用して実行されます。コンテナを使用して Configuration クラスを呼び出す
コンテナのソース コードを一度読んだので、コンテナを使用して実装できますか?
もちろん可能です。ここでは、Kaka の名前空間に注意する必要があります。将来のレビューの便宜のために、クラス名も Container という名前になっているため、エイリアスが追加されています。時間は必要ありません!
現在、コンテナのソース コードはほぼ説明されていますが、後で、Kaka が全員が閲覧できる完全なフローチャートを作成します。
“学習への粘り強さ、ブログへの継続性、そして共有への粘り強さは、カカがそのキャリア以来常に支持してきた信念です。巨大なインターネット上のカカの記事があなたに何かをもたらすことを願っています。少しお手伝いします。私はカカです。また次回お会いしましょう。
”
以上がThinkPHP コンテナーのバインディング パラメーターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。