在 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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
Oct 23 PHP
PHP 读取和编写 XML
Nov 19 PHP
详解Window7 下开发php扩展
Dec 31 PHP
php实现的一段简单概率相关代码
May 30 PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 PHP
详解no input file specified 三种解决方法
Nov 29 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
用console.table()调试javascript
2014/09/04 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
React组件中的this的具体使用
2018/02/28 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
TensorFlow实现模型评估
2018/09/07 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
Python ellipsis 的用法详解
2020/11/20 Python
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
优秀的茶餐厅创业计划书
2014/01/03 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
机械工程学院大学生求职信
2014/05/25 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
春节随笔
2015/08/15 职场文书
python实现简单倒计时功能
2021/04/21 Python
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
Golang解析JSON对象
2022/04/30 Golang