PHP基础:MVC利用服务容器统一管理外部对象
1.代码示例
<?php
namespace mvc_demo;
// 控制器依赖注入点改到构造方法, 实现对外部依赖对象的共享
// 1. 加载模型类
require 'Model.php';
// 2. 加载视图
require 'View.php';
// 3. 服务容器
class Container1
{
// 对象容器
protected $instances = [];
// 绑定: 向对象容器中添加一个类实例
public function bind($alias, \Closure $process)
{
$this->instances[$alias] = $process;
}
// 取出: 从容器中取出一个类实例 (new)
public function make($alias, $params = [])
{
return call_user_func_array($this->instances[$alias], []);
}
}
$container = new Container1;
// 绑定
$container->bind('model', function () {return new Model;});
$container->bind('view', function () {return new View;});
// 3. 创建控制
class Controller4
{
public function index(Container1 $container)
{
// 1. 获取数据
$data = $container->make('model')->getData();
// 2. 渲染模板/视图
return $container->make('view')->fetch($data);
}
}
// 客户端
// 实例化控制器类
$controller = new Controller4();
echo $controller->index($container);
//销毁对象
unset($controller);
2.总结
在MVC模式下通过对外部对象的统一管理,让对象更易于维护。