Mar
1
Laravelのサービスコンテナをコードリーディングする会
Laravel書いてるけどサービスコンテナの動作原理を実は理解していないですって人を集める会
Registration info |
喋りながらコードリーディングする枠 Free
FCFS
聞き専枠 Free
FCFS
|
---|---|
参加者への情報 |
(参加者と発表者のみに公開されます)
|
Description
概要
Laravelのサービスコンテナをコードリーディングする会です。
「Laravelエンジニアだけどサービスコンテナの動作原理を実はよく理解していないんですって人を集めてサービスコンテナコードリーディング会をやりたい」
とツイートしたら30Likesほどもらったので企画しました。
Zoomなどを使って配信しつつ、お話しながらやろうと思います。
聞き専枠も作っておいたので、お好きな方でエントリーしてください。
タイムスケジュール
20時〜21時 通話しつつもくもくとコードリーディング
21時〜 成果を発表したり、記事にまとめる(Zennのスクラップ機能がおすすめです)
イベント作成者について
Qiita https://qiita.com/mejileben
Laravelタグで1290Contributionしている程度にはLaravelを使ったり発信をしています(2021/02/20時点)。
余談
イベント企画者(@meijin)のサービスコンテナに対するイベント企画時点での理解度
イベントのハードルが上がってしまっているとアレなので、イベント企画者自身の理解度を赤裸々に残しておきます。 正直分からないことだらけです。
サービスコンテナとサービスプロバイダの違いが分からない
コンテナはクラス名とその実体をマッピングして保存している場所で、プロバイダはコンテナへの登録を受け持っているクラスのこと・・・?
bind()されたInterfaceと実装クラスの関係は何に保存されている?
以下のコードがあるとして、
// MySQLHogeRepositoryのインスタンスが取得できる
$this->app->make(HogeRepositoryInterface::class)
HogeRepositoryInterface::classとMySQLHogeRepository::classはAppServiceProvider等のbind()メソッドで紐付けを行っているわけですが、その紐付けは実体としては大きな連想配列とかに保存されている感じ?
Controllerクラスでは当たり前のようにメソッドインジェクションやコンストラクタインジェクションが行えるのはなぜ?
Controllerはapp->make()などしているわけではなくroutes/hoge.phpで呼び出しているだけなのに各種インジェクションが行えるのはどうして?これはindex.php->route系の処理を追っていけば分かるのかな。
ちなみにCommandを拡張したartisan command用のクラスではhandleメソッドでメソッドインジェクションができるが、コンストラクタインジェクションは失敗する。これはどうして?
メソッドインジェクションやコンストラクタインジェクションではどうして順不同で指定のクラスのバインド元が引っ張ってこれるの?
ControllerのアクションメソッドではRequest型にタイプヒントしたらRequest型の値が入る。これはどういう判断ロジック? 同様にコンストラクタインジェクションも。
public function index(Request $request, int $id) {
// ...
}
func_get_argsしてそれぞれの引数に対してget_classとかしてる?
各種インジェクションはなぜ再帰的に利用できるの?
ControllerからUseCaseをインジェクションしたら、そのUseCaseがコンストラクタインジェクションしているとそのインジェクションも無事に完了する。このように再帰的に?インジェクションが実行できているのはどうして?引数がプリミティブな値になるまで依存解決するための関数を再帰的に回してる?
bind()とinstance()の違いとは
細かいけどたまにinstance()を使わないとテストコードが動作しないとかあった記憶がある。どういう違い?
Media View all Media
If you add event media, up to 3 items will be shown here.