在 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设计聊天室步步通
Oct 09 PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
PHP 时间日期操作实战
Aug 26 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
详解WordPress开发中wp_title()函数的用法
Jan 07 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
全面了解PHP中的全局变量
Jun 17 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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
phpmyadmin操作流程
2006/10/09 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
Yii2如何批量添加数据
2016/05/17 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
python 合并文件的具体实例
2013/08/08 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
python合并同类型excel表格的方法
2018/04/01 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
中层干部岗位职责
2013/12/18 职场文书
求职信格式要求
2014/05/23 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
银行授权委托书范本
2014/10/04 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
慰问信格式
2015/02/14 职场文书
在校生证明
2015/06/17 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis