返回使用Facde......登陆

使用Facde简单案例

黄健2019-03-31 17:50:00271

db类

class Db{
    protected $content=null;
    public function __construct($config)
    {
        $dns = $config['type'].':host='.$config['host'].';dbname='.$config['dbname'].';charset='.$config['charset'];
        $pdo=new PDO($dns,$config['uname'],$config['pwd']);
        $this->content = $pdo;
    }
    public function lanjie(){
        echo '数据库连接成功';
    }
}

validate 类

class Validate{
    public function vali(){
        return '验证成功';
    }
}

view 类

class View{
    public function jump(){
        return '跳转到首页了';
    }
}


container类

require 'Db.php';
require 'Validate.php';
require 'View.php';
class Container{
    //创建一个空数组来保存工具类及实现方法
    protected $instance=[];
    //将需要实例化的类与它的实现方法进行绑定;将对象容器实例化
    public function bind($abstract,Closure $process){
        $this->instance[$abstract]=$process;
    }
    //创建特定类的实例
    public function make($abstract,$params=[]){
        return call_user_func_array($this->instance[$abstract],$params);
    }
}
$container = new Container();
////绑定db类
$config=['type'=>'mysql','host'=>'127.0.0.1','dbname'=>'test','charset'=>'utf8','uname'=>'root','pwd'=>'root'];
//绑定db
$container->bind('Db',function ()use($config){
    return new Db($config);
});
//绑定验证类
$container->bind('Validate',function (){
    return new Validate();
});
//绑定视图类
$container->bind('View',function (){
    return new View();
});

facde 类

require 'Container.php';
class Facde{
    protected static $container =null;
    public static function initialize(Container $container){
        static::$container=$container;
    }
    //连接数据库
    public static function content(){
        return static::$container->make('Db',[])->lanjie();
    }
    //验证
    public static function Validate(){
        return static::$container->make('Validate')->vali();
    }
    //试图
    public static function View(){
        return static::$container->make('View')->jump();
    }
}
echo "<h1>使用facde</h1>";
Facde::initialize($container);
echo Facde::content(),'<br>';
echo Facde::Validate(),'<br>';
echo Facde::View(),'<br>';

效果图:

faced.png

总结:先把单独的工具类放入 容器中,事先绑定。然后在 门脸类中用一个静态属性来保存容器类的实例 ,然后 使用一个初始化方法 依赖注入 容                器类, 门脸类中的 静态方法就是工具类的方法。这样就能引入 门脸类后直接静态调用了


最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送