在 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 相关文章推荐
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 PHP
浅析php header 跳转
Jun 17 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
CodeIgniter框架URL路由总结
Sep 03 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
PHP 验证身份证是否合法的函数
Feb 09 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
Laravel框架中缓存的使用方法分析
Sep 06 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
js arguments.callee的应用代码
2009/05/07 Javascript
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
vue实现抽屉弹窗效果
2020/11/15 Javascript
从零学Python之hello world
2014/05/21 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
关于python多重赋值的小问题
2019/04/17 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
基于python实现复制文件并重命名
2020/09/16 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
商场促销活动方案
2014/02/08 职场文书
正科级干部考察材料
2014/05/29 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书