在 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合并数组array_merge函数运算符加号与的区别
Oct 31 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
PHP常用的缓存技术汇总
May 05 PHP
php格式化金额函数分享
Feb 02 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
smarty的section嵌套循环用法示例
May 28 PHP
浅谈PHP中类和对象的相关函数
Apr 26 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
laravel 出现command not found问题的解决方案
Oct 23 PHP
laravel框架中视图的基本使用方法分析
Nov 23 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
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
深入理解js promise chain
2016/05/05 Javascript
setTimeout学习小结
2017/02/08 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
python实现大文件分割与合并
2019/07/22 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
python 求10个数的平均数实例
2019/12/16 Python
Python 实现try重新执行
2019/12/21 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
Python jieba库分词模式实例用法
2021/01/13 Python
计算s=f(f(-1.4))的值
2014/05/06 面试题
Linux开机引导的步骤是什么
2015/10/19 面试题
如何做好总经理助理
2013/11/12 职场文书
师范院校学生自荐信范文
2013/12/27 职场文书
监察建议书格式
2014/05/19 职场文书
承诺函格式模板
2015/01/21 职场文书
爱心捐款活动总结
2015/05/09 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python