これはメソッドレベル依存性注入です。 Request
メソッドをstore
メソッドに渡していますが、メソッドの代わりにRequest
オブジェクトの作成方法がわかっています。
メソッドシグネチャの型ヒントは2つのことを行います。
まず、プレーンなPHPのために、それはstore
メソッドに渡されたパラメータはRequest
オブジェクト、またはRequest
から継承オブジェクトでなければならないことを強制します。 store()
メソッドをRequest
オブジェクト(または子孫)以外のもので呼び出そうとすると、エラーが発生します。このため、厳密な型の施行の
は、我々は
$request
パラメータが
Request
オブジェクト(または子孫)でなければならないことを知っている、と私たちはそのパブリックインタフェースが使用可能であることに依存することができます(
input()
方法が存在することを知っています)。
第2に、Laravelの場合、このメソッドが必要とするオブジェクトのタイプをLaravelコンテナに伝えるので、正しいオブジェクトをコンテナから解決してメソッドに渡すことができます。コンテナを介してLaravelのコントローラメソッドが呼び出され、メソッド呼び出しの依存関係の自動解決が可能になります。
タイプヒントを削除すると、2つの問題が発生します。抽象レベルでは、任意のタイプのオブジェクト、またはスカラー値をstore()
メソッドに渡すことができます。文字列にinput()
を呼び出そうとすると、問題が発生します。より具体的なレベルでは、これはコントローラメソッドのLaravelの自動依存性解決を破ります。タイプヒントがなければ、Laravelはメソッドに必要なオブジェクトを知ることができないため、何も渡されません。null
にはinput()
を呼び出すことができないというエラーが表示されます。ストアメソッドには1つのパラメータが必要ですが、わからない、テストしていません)。
はい、関数に受け入れるデータ型を指定するだけです。クラス/関数は、そのオブジェクトをインスタンス化/作成する方法を知らない。さらに抽象化したい場合は、受け入れ可能なものを設定する際に汎用のインターフェースを使用してください。 – JimL