//容器类
//数据库操作类
class Db
{
//数据库连接
public function connect()
{
return '数据库连接成功
';
}
}
//数据验证类
class Validate
{
//数据验证
public function check()
{
return '数据验证成功
';
}
}
//视图图
class View
{
//内容输出
public function display()
{
return '用户登录成功';
}
}
/******************************************************************************/
//一.创建容器类
class Container
{
//创建属性,用空数组初始化,该属性用来保存类与类的实例化方法
public $instance = [];
//初始化实例数组,将需要实例化的类,与实例化的闭包方法'Closure $process'进行绑定
public function bind($abstract, Closure $process)
{
//键名为类名,值为实例化的方法
$this->instance[$abstract] = $process;
}
//创建类实例,返回一个类的实例
public function make($abstract, $params=[])
{ //这里的$params 貌似后边没有用到 还不了解具体用法;
return call_user_func_array($this->instance[$abstract],[]);
}
}
/******************************************************************************/
//二、服务绑定: 将类实例注册到容器中
$container = new Container();
//将Db类绑定到容器中
$container->bind('db', function(){
return new Db();
});
//将Validate类实例绑定到容器中
$container->bind('validate', function(){
return new Validate();
});
//将View类实例绑定到容器中
$container->bind('view', function(){
return new View();
});
//Facade类
require 'container.php';
class Facade
{ //把成员方法中都要用到的属性剥离出来
protected static $container = null;
public static function initialize(Container $container)
{ //对成员属性就行初始化
static::$container = $container;
}
// 动态方法的静态调用
public static function connect()
{
return static::$container->make('db')->connect();
}
public static function check()
{
return static::$container->make('validate')->check();
}
public static function display()
{
return static::$container->make('view')->display();
}
}
// 实现静态调用动态方法
Facade::initialize($container);
echo Facade::connect();
echo Facade::check();
echo Facade::display();