PHP Laravel中的Trait使用方法


Posted in PHP onJanuary 20, 2019

Trait是一种在单继承语言(如PHP)中重用代码的机制。Trait旨在通过使开发人员能够在生活在不同类层次结构中的多个独立类中自由地重用方法集来减少单继承的某些限制。Traits和类组合的语义以降低复杂性的方式定义,并避免了与多重继承和Mixins相关的典型问题。

Trait类似于类,但仅用于以细粒度和一致的方式对功能进行分组。无法自行实例化Trait。它是对传统继承的补充,可以实现行为的横向组合; 也就是说,类成员的应用程序不需要继承。

什么是PHP Trait?

Trait仅仅是您希望包含在另一个类中的一组方法。与抽象类一样,Trait不能自己实例化。

Trait的一个例子可以是:

trait SharePost {

 

 public function share($item)

 {

  return 'share this post';

 }

 

}

然后你可以把这个trait 包含在其他类中,就像这样:

class Post {

 

 use SharePost;

 

}

 

class Comment {

 

 use SharePost;

 

}

现在,如果要从这些类中创建新对象,您会发现它们都有share()方法可用:

$post = new Post;

echo $post->share(''); 

 

$comment = new Comment;

echo $comment->share('');

trait 如何运作?

从上面的示例中可以看出,尽管没有定义该方法,但是对象Post和Comment对象都具有share()可用的方法。

Trait基本上只是一种在运行时“复制和粘贴”代码的方法。

这意味着Trait被复制到Post和Comment类中,因此当您实例化一个新实例时,share()方法代码将可用。

我经常检查我的代码以及如何构建我的代码,以便可以快速完成未来的功能添加,并且新项目可以轻松扩展以前的想法。

如何在laravel中使用trait ?

我在我的Http目录中创建了一个Trait目录,其中有一个名为的TraitBrandsTrait.php

use App\Http\Traits\BrandsTrait;

class YourController extends Controller {

  use BrandsTrait;

  public function addProduct() {

    $brands = $this->brandsAll();

  }

}

这是我的BrandsTrait.php

<?php

namespace App\Http\Traits;use App\Brand;

trait BrandsTrait {

  public function brandsAll() {

    // 从品牌表中获取所有品牌

    $brands = Brand::all();    return $brands;

  }

}
PHP 相关文章推荐
php FPDF类库应用实现代码
Mar 20 PHP
php curl post 时出现的问题解决
Jan 30 PHP
php修改指定文件后缀的方法
Sep 11 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
PHP chop()函数讲解
Feb 11 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
Feb 11 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 PHP
PHP合并两个或多个数组的方法
Jan 20 #PHP
实例讲解通过​PHP创建数据库
Jan 20 #PHP
php中的explode()函数实例介绍
Jan 18 #PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 #PHP
PHP内置函数生成随机数实例
Jan 18 #PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 #PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 #PHP
You might like
php设置编码格式的方法
2013/03/05 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
js倒计时显示实例
2016/12/11 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
Python函数返回不定数量的值方法
2019/01/22 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
大学生职业生涯设计书
2014/01/02 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
通信工程专业求职信
2014/06/04 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
react 项目中引入图片的几种方式
2021/06/02 Javascript
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
Oracle 触发器trigger使用案例
2022/02/24 Oracle
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python