Thinkphp 6 - 继承系统 Facade 类实现静态方式调用动态方法(为自定义或第三方类库添加静态代理)

前言

推荐参照官方文档一起看:https://www.kancloud.cn/manual/thinkphp6_0/1037491

系统已经为大部分核心类库定义了 Facade(门面) ,当然我们也可以为自己的类库添加静态代理。
在这里插入图片描述

下面,我们一步步手工来创建一个自己的静态调用类库。

一、编写类库

这里的类库可以是自己编写的,当然也可以是第三方的轮子。

首先,我们在 app/ 目录下创建一个 common 公共类库文件夹,并创建 Demo.php
在这里插入图片描述
然后打开 Demo.php 文件,编写自己的类库功能代码(这里随便写点):

<?php

namespace app\common;

class Demo
{
    public function index()
    {
        return ':)';
    }
}

二、继承 Facade

编写好自己的类库后,需要继承系统提供的门面类(Facade)才能实现静态调用。

首先,我们在 app\ 目录下创建一个 facade 目录(用于生成静态调用),并创建 Demo.php
在这里插入图片描述

然后打开 Demo.php 文件,写入以下代码:

<?php

namespace app\facade;

## 调用系统Facade管理类
## 只要继承它便可实现自定义类库静态调用
use think\Facade;

/**
 * 为Demo类库添加静态代理
 * @return String
 */
class Demo extends Facade
{   
    // getFacadeClass: 获取当前Facade对应类名
    protected static function getFacadeClass()
    {   
        // 返回当前类代理的类
        return 'app\common\Demo';
    }
}

三、验证结果

随便创建一个控制器,我们来验证一下能否 静态调用 Demo 类中的动态方法

<?php

namespace app\controller;

## 调用被代理类库(Demo)
use app\facade\Demo;

class Index
{
    public function index()
    {
        // 尝试调用
        return Demo::index();
    }
}

成功。
在这里插入图片描述

写在后面

推荐您遵循 Thinkphp 开发命名规范。

以上这些文件夹的建立以及文件命名,都是可以随意的,但要注意命名空间!

猜你喜欢

转载自blog.csdn.net/weixin_44198965/article/details/108273589
今日推荐