ホームページ > PHPフレームワーク > ThinkPHP > ThinkPHP コンテナーのバインディング パラメーター

ThinkPHP コンテナーのバインディング パラメーター

咔咔
リリース: 2020-10-12 13:59:56
オリジナル
2015 人が閲覧しました

この記事は主に、各メソッドで __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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート