容器依赖注入和Thinkphp中Facade应用

Original 2019-03-16 17:08:03 178
abstract:<?php class DB{ public function connect() { return '链接数据库!'; } } class Validate{ public function check() { return '验证成功!'; }
<?php

class DB{

	public function connect()
	{
		return '链接数据库!';
	}

}

class Validate{

	public function check()
	{
		return '验证成功!';
	}

}

class Login{

	public function success()
	{
		return '登录成功!';
	}

}

class Container{

	public $bind = [];

	public function bind($abstract, Closure $process){
		$this->bind[$abstract] = $process;
	}

	public function make($abstract, $params=[]){
		return call_user_func_array($this->bind[$abstract], []);
	}

}

class Facade{

	protected static $container = null;

	public static function initialize(Container $container)
	{
		self::$container = $container;
	}

	public static function connect(){
		return self::$container->make('DB')->connect();
	}

	public static function check(){
		return self::$container->make('Validate')->check();
	}

	public static function success(){
		return self::$container->make('Login')->success();
	}

}

$container = new Container();
$container->bind('DB', function(){
	return new DB();
});
$container->bind('Validate', function(){
	return new Validate();
});
$container->bind('Login', function(){
	return new Login();
});

Facade::initialize($container);
echo Facade::connect();
echo '<br>';
echo Facade::check();
echo '<br>';
echo Facade::success();


// echo $container->make('DB')->connect();
// echo '<br>';
// echo $container->make('Validate')->check();
// echo '<br>';
// echo $container->make('Login')->success();

案例描述:

  1. 先用容器对登陆操作进行解耦

  2. 再通过Facade门面对操作进一步简化。让用户知其然不知其所以然。

Correcting teacher:查无此人Correction time:2019-03-18 09:42:22
Teacher's summary:不错,不错,继续加油。功能比较难理解,还需要反复练习的。

Release Notes

Popular Entries