ThinkPHP6门面(Facade)

门面

门面(Facade

门面为容器中的(动态)类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个facade类。

系统已经为大部分核心类库定义了Facade,所以你可以通过Facade来访问这些系统类,当然也可以为你的应用类库添加静态代理。

下面是一个示例,假如我们定义了一个app\common\Test类,里面有一个hello动态方法。

<?php
namespace app\common;

class Test
{
    public function hello($name)
    {
        return 'hello,' . $name;
    }
}

调用hello方法的代码应该类似于:

$test = new \app\common\Test;
echo $test->hello('thinkphp'); // 输出 hello,thinkphp

接下来,我们给这个类定义一个静态代理类app\facade\Test(这个类名不一定要和Test类一致,但通常为了便于管理,建议保持名称统一)。

<?php
namespace app\facade;

use think\Facade;

class Test extends Facade
{
    protected static function getFacadeClass()
    {
    	return 'app\common\Test';
    }
}

只要这个类库继承think\Facade,就可以使用静态方式调用动态类app\common\Test的动态方法,例如上面的代码就可以改成:

// 无需进行实例化 直接以静态方法方式调用hello
echo \app\facade\Test::hello('thinkphp');

结果也会输出 hello,thinkphp

说的直白一点,Facade功能可以让类无需实例化而直接进行静态方式调用。

~~~~~~~~~~~~~~

这个类定义一个静态代理类,(这个类名不一定要和动态类一致,但通常为了便于管理,建议保持名称统一)。

php 复制代码
<?php
namespace app\common\facade;

use think\Facade;

class User extends Facade
{
    protected static function getFacadeClass()
    {
        return 'app\common\service\User';
    }
}

只要这个类库继承think\Facade,就可以使用静态方式调用动态类的动态方法,代码如下:

php 复制代码
// 无需进行实例化 直接以静态方法方式调用login
        // 校验用户名密码
        $result = \app\common\facade\User::login($username, $password);
相关推荐
zgscwxd1 个月前
thinkphp6 --数据库操作 增删改查
数据库·thinkphp6
胡西风_foxww2 个月前
【vue2.7.16系列】手把手教你搭建后台系统__总目录
vue·教程·权限·thinkphp6·1024程序员节·后台系统·系列文章
zgscwxd7 个月前
【小白专用 已验证24.5.30】ThinkPHP6 视图
thinkphp6·thinkphp6视图
因起名而头秃7 个月前
thinkphp6使用layui分页组件做分页效果
前端·javascript·php·layui·thinkphp·thinkphp6
centaury321 年前
《使用ThinkPHP6开发项目》 - 创建控制器
开发语言·前端·php·接口·登录·thinkphp6·控制器
centaury321 年前
《使用ThinkPHP6开发项目》 - 登录接口三【表单验证】
登录·thinkphp6·表单验证·验证·validate
centaury321 年前
《使用ThinkPHP6开发项目》 - ThinkPHP6使用JWT生成Token
jwt·登录·token·thinkphp6
笑得好虚伪1 年前
thinkphp6生成PDF自动换行
pdf·php·thinkphp6
胡西风_foxww1 年前
thinkphp6(tp6)创建定时任务
定时任务·thinkphp6·tp6