在 PHP 和 Laravel 中使用 Traits的方法


Posted in PHP onNovember 13, 2019

在 PHP 和 Laravel 中使用 Traits的方法 

事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承。这意味着一个类只能从另一个类中继承。例如,可能希望从几个不同的类继承方法,以防止代码重复。在 PHP 5.4 中 一个新的语言特性被添加进来,这就是众所周知的 Traits,它在 Laravel 框架中被广泛使用。

PHP 官方网站给出了 Traits 的定义,如下:

“ Trait 是单继承语言(如 PHP )中的一种代码复用机制。 Trai 的目的是减少单继承语言的一些限制,能让开发者自由的重用在不同的类层次结构下几个独立类中的方法。 Trait 的语义组合与类的定义在某种程度上减少了代码的复杂度,避免了与多继承和 Mixins 相关的一些典型问题。

Trait 与类非常相似,但它的目的仅仅是用更好、一致的方式汇聚一些方法。 Trait 本身不能被实例化。除了传统继承之外,它能水平组合行为,换言之,类的应用程序不需要继承。”

PHP Traits是什么?

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(''); // 'share this post' 
$comment = new Comment;
echo $comment->share(''); // 'share this post'

Traits 如何工作 ?

从上面例子可以看到, 尽管 Post 和   Comment 本身没有定义方法,但是他们可以调用   share() 方法。

Trait 是运行时 「复制和粘贴」 代码的一种方式.

这意味着 Trait 被复制到 Post and  Comment ,因此当你实例化一个新实例, 可以直接调用 share() 方法。

我会定期检查我的代码以及如何构造新代码,目的是为了将来可以快速构建新功能,并且可以轻松的开启新项目。

那么,怎样在laravel中使用traits呢?

首先我在项目的 Http 目录下创建一个Traits文件夹,并且新建了一个名叫 BrandsTrait.php 的Trait文件

使用它就像这样:

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;
  }
}

甚至, 如果您在模型中找到另一种与产品和品牌相互作用有关的通用方法,那么将代码写在该 trait 是个不错的选择。

 总结

以上所述是小编给大家介绍的在 PHP 和 Laravel 中使用 Traits的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
php仿discuz分页效果代码
Oct 02 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
Yii2框架中一些折磨人的坑
Dec 15 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 25 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 #PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 #PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 #PHP
Yii框架学习笔记之应用组件操作示例
Nov 13 #PHP
Yii框架自定义数据库操作组件示例
Nov 11 #PHP
php接口隔离原则实例分析
Nov 11 #PHP
Yii框架布局文件的动态切换操作示例
Nov 11 #PHP
You might like
php实现jQuery扩展函数
2009/10/30 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
php通过各种函数判断0和空
2020/07/04 PHP
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
jQuery操作cookie
2016/08/08 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python中使用psutil查看内存占用的情况
2018/06/11 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
django 简单实现登录验证给你
2019/11/06 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
学校办公室主任职责
2013/12/27 职场文书
校本教研工作方案
2014/01/14 职场文书
财务简历的自我评价
2014/03/05 职场文书
保险公司早会主持词
2014/03/22 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
优秀团队申报材料
2014/12/26 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
2016新年致辞
2015/08/01 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android