为了更好的理解 IOC (inversion of controller) 本文先理解一下什么是依赖注入
(dependency injection )
伪代码案例
什么是依赖?
从以下伪代码中,可以看到。PayBill
类中 payMyBill
方法的实现,需要先实例化 Alipay
类。所以这个时候依赖就产生了。
所以 ioc 的思想就是不要在 PayBill class
里面用 new 的方式去实例化解决依赖, 而且转为由外部来负责,简单一点就是内部没有 new 的这个步骤,通过依赖注入的方式同样的能获取到支付的实例。
什么是依赖注入?
跟之前的比较的话,我们加入一个 Pay 接口, 然后所有的支付方式都继承了这个接口并且实现了 pay 这个功能。
当我们实例化 PayBill class
的之前, 我们首先是实例化了一个 Alipay class
,这个步骤就是生成了依赖了,然后我们需要把这个依赖注入到 PayBill class
的实例当中。
把 Alipay class
的实例通过 construct
注入的方式去实例化一个 PayBill class
在这里我们的注入是手动注入,不是自动的。而 Laravel 框架实现则是自动注入