事实上,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 如何工作 ?

从上面例子可以看到, 尽管 PostComment 本身没有定义方法,但是他们可以调用 share() 方法。

Trait 是运行时 「复制和粘贴」 代码的一种方式.

这意味着 Trait 被复制到 Post and Comment ,因此当你实例化一个新实例, 可以直接调用 share() 方法。

我会定期检查我的代码以及如何构造新代码,目的是为了将来可以快速构建新功能,并且可以轻松的开启新项目。

那么,怎样在laravel中使用traits呢?

首先我在项目的Http 目录下创建一个Traits文件夹,并且新建了一个名叫 BrandsTrait.php 的Trait文件

使用它就像这样:

use AppHttpTraitsBrandsTrait;class YourController extends Controller {use BrandsTrait;public function addProduct() {$brands = $this->brandsAll();}
}

这是我的 BrandsTrait.php

<?php
namespace AppHttpTraits;use AppBrand;
trait BrandsTrait {public function brandsAll() {// 从品牌表中获取所有品牌.$brands = Brand::all();return $brands;}
}

甚至, 如果您在模型中找到另一种与产品和品牌相互作用有关的通用方法,那么将代码写在该 trait 是个不错的选择。

以上就是文章全部内容,感谢你的辛苦阅读。对你有帮助的可以关注此专栏,定期更新文章,在此也准备了一些文档资料给大家。

《PHP进阶、面试;文档、视频资源免费获取》,可复制链接后用石墨文档 App 或小程序打开​shimo.im

php 两个类 相互调用_如何在 PHP 和 Laravel 中使用 Traits相关推荐

  1. java 两个类互相包含_如何在Java中互相使用两个类中的方法?

    我一直在四处张望,我至少找到了一个不清楚的答案. 我正在使用GUI构建一个非常基本的聊天应用程序,并且已经将GUI与连接对象分离了.现在,我需要在服务器类中从GUI调用一种方法,反之亦然.但是我不太了 ...

  2. gmail附件调用_如何在Android版Gmail中添加附件

    gmail附件调用 If you don't use email as part of your day to day life, it can easily be one of those thin ...

  3. Cocos Creator两个类相互引用(调用)

    如果两个类相互引用,脚本加载阶段就会出现循环引用,循环引用将导致脚本加载出错: ///Game.js var Item = require("Item"); var Game = ...

  4. cocos 时间函数需要什么引用_Cocos Creator两个类相互引用(调用)

    如果两个类相互引用,脚本加载阶段就会出现循环引用,循环引用将导致脚本加载出错: ///Game.js var Item = require("Item"); var Game = ...

  5. python嵌套类(内部类相互调用)_核心解密Python函数在(类与函数之间)和(类与类之间)互相调用...

    image.png 一.类与函数之间 首先来看一个函数间的调用 类方法: #实现类中函数之间互相调用 #下面一个学生的简单自我介绍为例子 __metaclass__=type #自由的.动态的修改/增 ...

  6. 两个类相互包含引用的问题--类前向声明

    在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A {     int i;     B b; } clas ...

  7. 两个类相互包含对方成员的问题(2)

    1 //A.h文件 2 #ifndef A 3 #define A 4 #include"B.h" 5 static int count=0; 6 class A 7 { 8 pu ...

  8. java 继承调用_【JAVA学习】继承中函数调用机制

    类(类的对象)在调用函数时,究竟哪一个函数被调用,是存在特定的机制的,现在我们来梳理下其步骤. 步骤一:当其调用一个函数的时候,编译器根据其声明的变量类型和调用的函数名字找到所有此"类&qu ...

  9. java 电池类类代码举例_下面哪个不是java中的关键字?

    [简答题]Java的字符类型采用的是ASCII编码. [简答题]1. 介绍16日野外考察时,你的研究区的岩性,如果以该岩石制作岩样进行单轴压缩实验,请预估一下它的应力应变曲线的特征. [其它]乡村旅游 ...

最新文章

  1. 线上分享会预告之深度学习在3D场景中的应用
  2. vectorvn1610报价_德国Vector测试软件VN1610A-上海壹侨特价
  3. PS 技术篇-使用ps快速完成证件照片换背景色实例演示10s搞定!
  4. Windows Azure Tools DSInit Error
  5. 使用PHP时出现乱码,php出现乱码该怎么解决?
  6. 如何让mysql配置文件生效_mysql配置文件生效测试
  7. 1024程序员节:除了高薪,你还有什么理由坚持做程序员?
  8. 第 6 章 本地方法接口
  9. Java8 LocalDateTime和Date相互转换
  10. VS985破解电信4G或联通4G
  11. 【工业互联网】工业发展的痛点体现在哪里?如何整合边缘计算与云计算的优势来成就工业智能?
  12. 【考试总结贴】工程测量学
  13. NAS HomeAssistant
  14. 玉米社:抖音作品几大核心指标,完播率、点赞率、吸粉率多少算好?
  15. hibernate中各种不一样的查询hql,hqc(一)
  16. js正则验证人名,包含· | 手机号正则验证(199)
  17. autocad Objectarx 使用setWindowArea设置打印区域后,发现与实际打印出来的区域不一致的问题
  18. Ubuntu 安装shutter
  19. Python实现Chrome浏览器书签自动备份
  20. win7 vs2013 编译错误

热门文章

  1. 使用linux 的wget下载国外的域名的地址,下载不了,
  2. python判断输入的数字是完全平方还是三次方
  3. PPP Over Frame Relay配置
  4. GridView里的一点小功能:截取多余字符、改变鼠标经过行的样式
  5. php使用模版开发的实例,PHP-Web应用程序开发:使用模板_php
  6. 单片机sleep函数的头文件_单片机空项目代码解析
  7. php把数据创建一个表格,PHP创建(导出Excel数据表格)
  8. 信息学奥赛一本通 1114:白细胞计数 | OpenJudge NOI 1.9 08
  9. 信息学奥赛一本通 1057:简单计算器 | OpenJudge NOI 1.4 19
  10. 树的直径(51Nod-2602)