在 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&amp;&amp;mysql)二
Oct 09 PHP
需要发散思维学习PHP
Jun 29 PHP
解析yii数据库的增删查改
Jun 20 PHP
php中的curl使用入门教程和常见用法实例
Apr 10 PHP
codeigniter发送邮件并打印调试信息的方法
Mar 21 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
yii2-GridView在开发中常用的功能及技巧总结
Jan 07 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 PHP
php 调用百度sms来发送短信的实现示例
Nov 02 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 PHP
PHP单元测试配置与使用方法详解
Dec 27 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中对用户身份认证实现两种方法
2011/06/04 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
微信小程序入门教程
2016/11/18 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
Node.js事件的正确使用方法
2019/04/05 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
python制作websocket服务器实例分享
2016/11/20 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
一份python入门应该看的学习资料
2018/04/11 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
超市店庆活动方案
2014/08/31 职场文书
2014年女职工工作总结
2014/11/27 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技