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 相关文章推荐
解析phpstorm + xdebug 远程断点调试
Jun 20 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
小谈php正则提取图片地址
Mar 27 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
php保存信息到当前Session的方法
Mar 16 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
微信公众号开发之通过接口删除菜单
Feb 20 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
phpstudy的php版本自由修改的方法
Oct 18 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 30 PHP
Jsonp劫持学习
Apr 01 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
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
Python输出带颜色的字符串实例
2017/10/10 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
python实现ping命令小程序
2020/12/28 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
模具专业求职信
2014/06/26 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
大学新生入学感想
2015/08/07 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
python实现简单的名片管理系统
2021/04/26 Python
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL