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学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
PHP伪静态页面函数附使用方法
Jun 20 PHP
PHP用mysql数据库存储session的代码
Mar 05 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
PHP导入导出Excel代码
Jul 07 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
禁止直接访问php文件代码分享
May 05 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 setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
php绘制一条弧线的方法
2015/01/24 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
php实现分页显示
2015/11/03 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
python连接oracle数据库实例
2014/10/17 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
python学生管理系统开发
2019/01/30 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Python通过format函数格式化显示值
2020/10/17 Python
应届生如何写自荐信
2014/01/05 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
调解书格式范本
2015/05/20 职场文书
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL