facade
在服务容器与工作类之间添加一个中间层,门面
namespace mvc;
use Closure;
// 加载模型和视图
require 'model.php';
require 'view.php';
// 服务容器
class Container1{
//对象容器
protected $instances=[];
// 添加对象
public function bind($alias,Closure $process){
$this->instances[$alias]=$process;
}
// 取出对象
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();});
//--------------------
// 在服务容器与工作类之间添加一个中间层,门面
class Facade{
protected static $container =null;
//初始化
public static function initialize(Container1 $container){
static::$container=$container;
}
}
class UsersModel extends Facade{
public static function getData(){
return static::$container->make('model')->getData();
}
}
class UsersView extends Facade{
public static function fetch($data){
return static::$container->make('view')->fetch($data);
}
}
//--------------------
class Controller5
{
//构造器主要是为了facade门面的初始化
public function __construct(Container1 $container)
{
Facade::initialize($container);
}
public function index()
{
$data = UsersModel::getData();
return UsersView::fetch($data);
}
}
// 客户端测试
$controller = new Controller5($container);
echo $controller->index();
调用代码更加简洁,使用方便且减少出错
composer 是什么
- php 包依赖管理工具
- 包: 组件,一组相关的类,接口,trait 的结合体
- 依赖: A -> B -> C -> D
- composer 就是用 php 语言开发的
组件放在了哪里
- github.com, gitee.com
- 查询平台: https://packagist.org
下载
- 官网下载:https://getcomposer.org/
中文网: https://www.phpcomposer.com/
windows 下载
- 将 php.exe 所在路径添加到全局 path 变量中
- 将下载的 composer.phar 复制到 php.exe 所在目录中
创建 composer.bat:
@php "%~dp0composer.phar" %*
php composer.phar -V
- 简化成: composer -V
- 将镜像改为国内阿里云:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
常用指令
- composer install: 安装 composer.josn 中的依赖
- composer update: 更新依赖
- composer selfupdate: 更新 composer 版本
- composer require: 添加依赖到 composer.json 中
- composer create-project: 安装项目
自动加载 autoload
- 文件级: “files”, 需要将加载的文件逐个导入
- 目录级: “classmap”,类目录的映射
- 空间级: “psr-4”: 命名空间映射到目录
- 无论是哪一种,最后都要执行一下”composer dump”,更新 composer.json 中的 autoload 配置项