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应用程序来获取Web服务器的状态信息
Oct 09 PHP
php对称加密算法示例
May 07 PHP
php自定义apk安装包实例
Oct 20 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
php实现倒计时效果
Dec 19 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 PHP
PHP代码覆盖率统计详解
Jul 22 PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 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数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
php接口隔离原则实例分析
2019/11/11 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
理解JavaScript中的事件
2006/09/23 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
Python发送Email方法实例
2014/08/21 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
python自动化生成IOS的图标
2018/11/13 Python
Python的垃圾回收机制详解
2019/08/28 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
python能否java成为主流语言吗
2020/06/22 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
教师求职推荐信范文
2013/11/20 职场文书
迎元旦广播稿
2014/02/22 职场文书
高中生操行评语
2014/04/25 职场文书
师德师风的心得体会
2014/09/02 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
农村党支部承诺书
2015/04/30 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript