用PHP特性trait实现简易Laravel Facade

发布时间 - 2022-01-27 00:00:00    点击率:

下面由laravel教程栏目给大家介绍如何利用php trait实现简易facade,希望对大家有所帮助!

简述

Facade 可以有效帮我实现方法的静态化。Laravel 大部分的扩展包都使用了 Facade。【推荐:laravel视频教程】
下面的简易 Facade 主要是利用 PHP 的特性 trait,魔术方法 __callStatic,反射类 ReflectionClass

使用场景

后台系统大部分都会有类似这样的操作:

这样似乎没有什么问题,但是还会存在下面这样的:

$article = Article::find($id);if (!$article) {
    throw new \Expection("资源不存在");}$article->delete();

这样写法十分不优雅。

上代码

1、首先我们应该要有一个 Service

2、新建一个 Trait

trait 为了多继承而存在的,可以去 PHP官网 看文档。

newInstanceArgs();

        // 调用该不存在的方法
        $model = call_user_func_array([$instance, $method], [$arg]);

        // 如果存在复杂操作交给 callback
        return isset($args[2]) ? $args[2]($model) : self::callback($model, $method);
    }}

首先我们关注 __callStatic 这个魔术方法。 当调用不存在的静态方法时会触发该方法。和他相似的魔术方法是 __call。这是使用 __callStatic 是为了达到 Facade 的效果。

__callStatic 有两个回调参数 $method被调用的且不存在的方法$args$method 方法中所传递的参数(数组形式)。

这样一个简易的 trait 就完成了。

使用

我们新建一个 command

$ php artisan make:command TestCommand

写入下面的内容

load('author');
        });
    }}

其中的 Article 模型需要自己去创建。
接下来就可以看看效果了:

$ php artisan test:test

结语

这样我们就抛弃了使用 abstract 抽象类,来达到了跟 Facade 一样的效果。同时也做到了代码复用。
这样使用程序会多走很多步,但是跟优雅比起来,性能什么的都无所谓了。

表达不是很清楚,需要自己深入体会了。                                                 


# php  # laravel  # 继承  # 多继承  # 不存在  # 回调  # 新建一个  # 这是  # 会有  # 和他  # 还会  # 要有  # 帮我  # 达到了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel中间件如何使用_Laravel自定义中间件实现权限控制  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Linux后台任务运行方法_nohup与&使用技巧【技巧】  如何在万网ECS上快速搭建专属网站?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  教你用AI润色文章,让你的文字表达更专业  如何选择可靠的免备案建站服务器?  如何快速选择适合个人网站的云服务器配置?  如何用VPS主机快速搭建个人网站?  Laravel中的Facade(门面)到底是什么原理  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Laravel如何实现一对一模型关联?(Eloquent示例)  Java垃圾回收器的方法和原理总结  如何在景安服务器上快速搭建个人网站?  教你用AI将一段旋律扩展成一首完整的曲子  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何用免费手机建站系统零基础打造专业网站?  网站页面设计需要考虑到这些问题  Android实现代码画虚线边框背景效果  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何在橙子建站中快速调整背景颜色?  如何在万网利用已有域名快速建站?  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel如何实现事件和监听器?(Event & Listener实战)  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  简历在线制作网站免费版,如何创建个人简历?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  装修招标网站设计制作流程,装修招标流程?  企业网站制作这些问题要关注  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  如何快速搭建FTP站点实现文件共享?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  成都网站制作公司哪家好,四川省职工服务网是做什么用?