今回は、Laravelのソースコード分析依存性注入の手順を詳しく説明します。Laravelのソースコード分析依存性注入の注意事項
は何ですか。以下は実際的なケースです。見てみましょう。はじめに
ご存知のとおり、近年、その優雅さで知られるフレームワークが無数に存在し、国内の PHPer の間で使用され始めています。しかし、Larave には明らかな欠点があります。 : it ドキュメントの内容は悲惨です。 この記事では、Laravel の依存関係注入について詳しく説明し、参考と学習のために共有します。以下では多くを説明しません。詳細な紹介を見てみましょう。Laravel のコントローラーのコンストラクターまたはメンバー メソッドでは、次のような型制約
を介して依存関係注入を使用できます。public function store(Request $request) { //TODO }
1. ルート定義
ルート定義ファイルには、このようなルートが定義されています:Route::resource('/role', 'Admin\RoleController');
ルートメソッド分析
に従ってコントローラーとメソッドを見つけます。ルート定義に追加し、特定のメソッドを実行するメソッドはdispatchメソッドに実装されます。 (ファイル:vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php)public function dispatch(Route $route, $controller, $method) { $parameters = $this->resolveClassMethodDependencies( $route->parametersWithoutNulls(), $controller, $method ); if (method_exists($controller, 'callAction')) { return $controller->callAction($method, $parameters); } return $controller->{$method}(...array_values($parameters)); }
protected function resolveClassMethodDependencies(array $parameters, $instance, $method) { if (! method_exists($instance, $method)) { return $parameters; } return $this->resolveMethodDependencies( $parameters, new ReflectionMethod($instance, $method) ); }
2.依存オブジェクトの取得例
から依存オブジェクトの制約タイプを取得します。メソッドのパラメータのみ、この依存オブジェクトをインスタンス化できます。protected function transformDependency(ReflectionParameter $parameter, $parameters) { $class = $parameter->getClass(); // If the parameter has a type-hinted class, we will check to see if it is already in // the list of parameters. If it is we will just skip it as it is probably a model // binding and we do not want to mess with those; otherwise, we resolve it here. if ($class && ! $this->alreadyInParameters($class->name, $parameters)) { return $parameter->isDefaultValueAvailable() ? $parameter->getDefaultValue() : $this->container->make($class->name); } }
3. PHPリフレクションについて
ReflectionMethodの使用例を示します。class Demo { private $request; public function store(Request $request) { } }
phpのデータ構造と逐次リンクリスト、リンク線形リストの使用方法の詳細な説明
php統計的なバイナリ1を実装するためのアルゴリズムステップの詳細な説明
以上がソースコード分析とLaravel依存関係注入手順の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。