废话不说直接上实例
//laravel 国际奥委会理解以及依赖注入,DIinterface SuperModuleInterface {,,,/* * ,,,,*,超能力激活方法 ,,,, ,,,,*,任何一个超能力都得有该方法,并拥有一个参数 ,,,,* @param array target 美元;针对目标,可以是一个或多个,自己或他的人 ,,,*/,,,public function 激活(array 美元目标); }class XPower  implements SuperModuleInterface {,,, public function 激活(array 目标美元) ,,,{,,,,,,,//,这只是个例子,具体自行脑补 ,,,} }/* * ,*终极×××,(就这么俗) ,*/class UltraBomb implements  SuperModuleInterface {,,, public function 激活(array 目标美元) ,,,{,,,,,,,//,这只是个例子,具体自行脑补 ,,,} }class 超人{,,,protected 模块;美元,,,,public function __construct (SuperModuleInterface $模块) ,,,{,,,,,,,这个→美元module =,美元模块; ,,,} {}class 容器,,,public 结合美元;,,,,public 美元实例;,,,,public function 绑定($抽象,具体的美元) ,,,{,,,,,,,if (concrete 美元;instanceof 关闭),{,,,,,,,,,,,这个→美元绑定[摘要]美元,=,混凝土美元; ,,,,,,,},else {,,,,,,,,,,,这个→美元实例[摘要]美元,=,混凝土美元; ,,,,,,,} ,,,},,,,public function 使(抽象,美元,美元parameters =, []) ,,,{,,,,,,,if (收取($ this→实例[摘要]美元)),{,,,,,,,,,,,return $ this→实例[摘要]美元; ,,,,,,,} ,,,,,,,函数(参数,美元,美元),,,,,,,,,return 中的call_user_func_array ($ this→结合[摘要]美元,美元参数); ,,,} }//,创建一个容器(后面称作超级工厂)container 美元;=,new 集装箱;//,向该,超级工厂添加超人的生产脚本容器→美元绑定(‘超人’,函数($容器,moduleName美元),{,,,return new 超人(容器→美元($ moduleName)); });//,向该,超级工厂添加超能力模组的生产脚本容器→美元绑定(“xpower”,函数(容器),{,,,return new xpower;//});同上容器→美元绑定(ultrabomb,,功能(容器)美元,{,,,return new ultrabomb; });//,* * * * * * * * * * * * * * * * * *,华丽丽的分割线,* * * * * * * * * * * * * * * * * * * * * *//,开始启动生产superman_1 美元;=,容器→美元使(“超人”,[' xpower ']); var_dump(容器→美元绑定);死亡;superman_2 美元;=,容器→美元使(“超人”,[' ultrabomb ']); superman_3 美元;=,容器→美元使(“超人”,[' xpower ']); var_dump ($ superman_1);死亡;//,…随意添加
laravel核心就是服务容器。所有的服务提供者绑定到容器中。细致的讲解可以取作者的官网进行查看整个奥委会的核心应该是制造方法的中的call_user_func_array()函数的调用
<>前容器→美元绑定(‘超人’,函数($容器,moduleName美元),{,,,return new 超人(容器→美元($ moduleName)); });闭包函数
函数($容器,moduleName美元),{,,,,return new 超人(容器→美元($ moduleName)); }
恰好给call_user_fun_array()的第一个参数使用。执行完三次绑定之后,容器→美元绑定中有了三个关键→价值的闭包当再次执行容器→美元使(“超人”,[' xpower '])时,容器→美元绑定中超人对应上述代码的闭包,参数为(美元)容器,xpower)执行新超人(容器→美元($ moduleName)时,对容器→美元应使(xpower);则再次走中的call_user_func_array()的流程,返回新xpower()给超人的构建。所以国际奥委会实质就是2次调用中的call_user_func_array ();
注:该代码引用自https://www.insp.top/article/learn-laravel-container