こんなコードがありました
public function XXX() { return app('key_class')->make(); }
テストコードが2種類
$mock = Mockery::mock('XxxService')->makePartial(); $this->app->instance('key_class', $mock)
$mock = Mockery::mock('overload:XxxService')->makePartial();
何してるの?
前者は、'key_class'に設定していた結合を、instance結合で新しく上書きしている。
後者は、該当クラスが生成された時に、$mockに入れ替える。
どう違うの?
public function XXX() { $obj = new XxxService(); $value = app('key_class'); }
仮にこんな関数があったときに、
前者は$objはXxxServiceのオブジェクト、$valueは、$mockになります。
一方後者は、両方共$mockになります。
そんなパターンある?
例えば、これでXxxServiceのオブジェクトだったからいいですが、
これがEloquentのモデルクラスだったら?
どこか予想外で生成されそうな気がしませんか・・・?
基本、overloadを使おうと思ったら、踏みとどまる方がいいかもしれないです。
それ、本当にoverloadでやるべき・・・?