laravel下trait的使用代码实例详解

admin3年前PHP教程58

前言

今天在整理laravel的练习项目时,发现自己的代码结构中有很多重复的代码。于是搜索了一下laravel框架的代码复用机制。知道了Trait的存在,于是学习使用了一下。

关于Trait的理解

Trait是PHP5.4引入的新概念,定义方式和class的定义方式类似。但是并不具备class的完整性。Trait看上去更像是一个class的一部分。它使不相关的两个class能够具有类似的行为。

Trait的简单使用

新建一个Trait

本人由于数据库操作上使用了eloquent模型,在多表查询时需要指定表格关系。在多个表中都使用了hasmany()关联到了主表。于是便把这一段代码块单独提出来并放入了名为HasInvoices的Trait中,文件目录在AppTraits下。注意Trait名与文件名应该相同


Trait的引入

Trait的引入十分简单,在需要代码块的class中使用use Trait名就行。


记得头部要用use引入Trait。


关于Trait的用法

在上面所述的用法中,很显然用到的是完全相同的代码块。对于类似而不完全相同的的代码块复用,可以通过判断“不同点”来产生不同的结果。假设初始代码如下,人类A,动物类B,机器人类C。都具有付出成本,执行行为的能力。但由于彼此之间不具备继承关系,所以不适合使用继承。

<?phpclass A{ public $action = "逛街"; public $money = 200; public function action(){echo "花了".$this->money.$this->action.""; }}class B{ public $action = "吃骨头"; public $time = 2; public function action(){echo "花了".$this->time."分钟".$this->action.""; }}class C{ public $action = "跳舞"; public $time = 30; public function action(){echo "花了".$this->time."分钟".$this->action.""; }}$a = new A;$b = new B;$c = new C;echo $a->action();echo $b->action();echo $c->action();

运行结果


将action函数提出到Trait,修改后代码

trait D{ public function action(){echo "花了".(property_exists($this,"time")? $this->time."分钟":$this->money) .$this->action.""; }}class A{ use D; public $action = "逛街"; public $money = 200;}class B{ use D; public $action = "吃骨头"; public $time = 2;}class C{ use D; public $action = "跳舞"; public $time = 30;}$a = new A;$b = new B;$c = new C;echo $a->action();echo $b->action();echo $c->action();

运行结果


到此这篇关于laravel下trait的使用代码实例详解的文章就介绍到这了,更多相关laravel下trait的使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

PHP保姆级API制作教程,不会剁手

方法一:直接返回图片第一步:首先你得把图片的链接一行一行的排版放到txt文档,如下:第二步:使用如下php代码如下所示<?php//存有美图链接的文件名img.txt$filename = &q...

PHP加MySQL消息队列深入理解

消息队列:在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以...

php之性能优化案例

php是一个很流行的脚本语言,现在很多公司(新浪、优酷、百度、搜狐、淘宝等等)在使用这种语言进行网站开发。我的这篇文章,我只是希望能够提高你的php脚本性能。请记住你的php脚本性能,很多时候依赖于你...

php中日期类型转换实例讲解

1、使用date()函数将UNIX时间戳转换为日期。2、使用strtotime()函数将日期转换为UNIX时间戳。在PHP中是可以完成日期格式转换的,不过有一个缺点就是占用PHP解析器的解析时间,因此...

php memcached的实例用法详解

1、启动Memcached。2、使用ps命令查看一下运行状态。3、创建一个Memcached对象。4、通过add和get方法添加数据即可。记得一定要先启动Memcached哦!?1[root@loca...

美国高防服务器cn2线路速度怎么样

美国高防服务器cn2线路速度怎么样?由于美国高防服务器的网络连接方式和线路供应商可能不同,因此速度会有所不同。CN2线路是中国电信的高速通道之一,一般来说,使用CN2线路的美国高防服务器在连接中国大陆...