在 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 相关文章推荐
COM in PHP (winows only)
Oct 09 PHP
php 读取文件乱码问题
Feb 20 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
smarty内置函数section的用法
Jan 22 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 PHP
php发送与接收流文件的方法
Feb 11 PHP
PHP中文乱码解决方案
Mar 05 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
详解php框架Yaf路由重写
Jun 20 PHP
PHP将整数数字转换为罗马数字实例分享
Mar 17 PHP
Laravel创建数据库表结构的例子
Oct 09 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 字符串 小常识
2009/06/05 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
js的逻辑运算符 ||
2010/05/31 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
javascript date格式化示例
2013/09/25 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
javascript中的面向对象
2017/03/30 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
python基础教程项目三之万能的XML
2018/04/02 Python
详解Django的CSRF认证实现
2018/10/09 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
一夜的工作教学反思
2014/02/08 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫