用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和图片同行显示(文字超出用省略号,图片自动靠右边) 成都网站制作公司哪家好,四川省职工服务网是做什么用?

