当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-18 10:51:43 浏览: 评论:0 

这篇文章主要介绍了laravel下trait的使用代码实例详解,使用trait可以提高代码的复用性,有感兴趣的同学可以学习下。

前言

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

关于Trait的理解

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

Trait的简单使用

新建一个Trait

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

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

Trait的引入

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

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

记得头部要用use引入Trait。

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

关于Trait的用法

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

  1. <?php 
  2. class A{ 
  3.  public $action = "逛街"
  4.  public $money = 200; 
  5.  public function action(){ 
  6.   echo "花了".$this->money.$this->action."\n"
  7.  } 
  8.  
  9. class B{ 
  10.  public $action = "吃骨头"
  11.  public $time = 2; 
  12.  public function action(){ 
  13.   echo "花了".$this->time."分钟".$this->action."\n"
  14.  } 
  15.  
  16. class C{ 
  17.  public $action = "跳舞"
  18.  public $time = 30; 
  19.  public function action(){ 
  20.   echo "花了".$this->time."分钟".$this->action."\n"
  21.  } 
  22. $a = new A; 
  23. $b = new B; 
  24. $c = new C; 
  25. echo $a->action(); 
  26. echo $b->action(); 
  27. echo $c->action(); 

运行结果

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

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

  1. trait D{ 
  2.  public function action(){ 
  3.   echo "花了".(property_exists($this,'time')? $this->time."分钟":$this->money) 
  4.    .$this->action."\n"
  5.  } 
  6.  
  7. class A{ 
  8.  use D; 
  9.  public $action = "逛街"
  10.  public $money = 200; 
  11.  
  12. class B{ 
  13.  use D; 
  14.  public $action = "吃骨头"
  15.  public $time = 2; 
  16.  
  17. class C{ 
  18.  use D; 
  19.  public $action = "跳舞"
  20.  public $time = 30; 
  21. $a = new A; 
  22. $b = new B; 
  23. $c = new C; 
  24. echo $a->action(); 
  25. echo $b->action(); 
  26. echo $c->action(); 

运行结果

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

Tags: laravel trait

分享到: