overloadって?
こちらで軽く内容触れています。
なんで安易に使わない方が良いの?
overloadは、対象のクラスがインスタンス化されたとき、全てのインスタンスが入れ替わります。
では、以下のようなコードがあったとき、
function func() { $user = $this->xxx_repository->xxx(); $some_obj = $this->yyy_repository->yyy(); $zzz_obj = $this->zzz_service->zzz(); }
このときに、User::classをoverloadした。これで$userはいい感じに出来たなー
ってなって、もしzzz_serviceでUser::classがインスタンス化されてたら?
全てのコードを自分で書いたならまだしも、そうでなければ、知らないところでインスタンス化されている可能性があります。
予期しない動作が起こる可能性がある。それが、影響範囲の広いコードを扱うということです。
あ、説明のために書いたので、zzz_serviceモックするだろというツッコミはおいておいてください(´;ω;`)
影響範囲の広さ考えよう
不要なところにまで影響するとかを考えると、予期しない動作が起こる可能性があります。
ちなみに、本当に必要な場合もあるので、理由なく安易に使わないでってだけです!
テスト通ったぜー!って思っていたら、実は本来通るべきではなかったとかあるので、注意してコード書こうと思いました!(ちなみに、実際通ってなかったです