abstract:<?php // 工具类 class Db { public function conn() { return '数据库连接成功!<br>'; } } class Validate { public function check() { return '数据验证成功!
<?php // 工具类 class Db { public function conn() { return '数据库连接成功!<br>'; } } class Validate { public function check() { return '数据验证成功!<br>'; } } class View { public function show() { return '数据展示成功!<br>'; } } // 创建容器,将类与类的实例化过程绑定到容器中 class Container { protected $container = []; public function bind($validate,Closure $param) { $this->container[$validate] = $param; } public function make($validate,$param = []) { return call_user_func_array($this->container[$validate],[]); } } // 服务注册,bind将可能用到的工具类全部绑定到容器中 $container = new Container(); $container->bind('db',function(){ return new Db(); }); $container->bind('validate',function(){ return new Validate(); }); $container->bind('view',function(){ return new View(); }); // 依赖容器 class User { public function login(Container $container) { echo $container->make('db')->conn(); echo $container->make('validate')->check(); echo $container->make('view')->show(); } } $user = new User(); echo $user->login($container);
老师我想问:Container类中的make()方法中的call_user_func_array()执行的是哪个函数啊?是make()吗?
Correcting teacher:查无此人Correction time:2019-04-23 13:48:31
Teacher's summary:完成的不错。有问题可以提交工单,作业中你无法追问。 call_user_func_array有两个参数,第1个参数是一个字符串,表示要调用的函数名,第2个参数是一个数组,表示参数列表,按照顺序依次会传递给要调用的函数。