<?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();
案例描述:
先用容器对登陆操作进行解耦
再通过Facade门面对操作进一步简化。让用户知其然不知其所以然。