Thinkphp 6 - 继承系统 Facade 类实现静态方式调用动态方法(为自定义或第三方类库添加静态代理)
2022-11-24 11:10:29
201
{{single.collect_count}}

前言

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

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

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

一、编写类库

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

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

<?phpnamespace app\common;class Demo{public function index(){return ':)';}}

二、继承 Facade

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

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

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

<?phpnamespace app\facade;## 调用系统Facade管理类## 只要继承它便可实现自定义类库静态调用use think\Facade;/** * 为Demo类库添加静态代理 * @return String */class Demo extends Facade{ // getFacadeClass: 获取当前Facade对应类名protected static function getFacadeClass(){ // 返回当前类代理的类return 'app\common\Demo';}}

三、验证结果

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

<?phpnamespace app\controller;## 调用被代理类库(Demo)use app\facade\Demo;class Index{public function index(){// 尝试调用return Demo::index();}}

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

写在后面

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

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

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}