php 两个类 相互调用_如何在 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 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相关推荐
- java 两个类互相包含_如何在Java中互相使用两个类中的方法?
我一直在四处张望,我至少找到了一个不清楚的答案. 我正在使用GUI构建一个非常基本的聊天应用程序,并且已经将GUI与连接对象分离了.现在,我需要在服务器类中从GUI调用一种方法,反之亦然.但是我不太了 ...
- 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 ...
- Cocos Creator两个类相互引用(调用)
如果两个类相互引用,脚本加载阶段就会出现循环引用,循环引用将导致脚本加载出错: ///Game.js var Item = require("Item"); var Game = ...
- cocos 时间函数需要什么引用_Cocos Creator两个类相互引用(调用)
如果两个类相互引用,脚本加载阶段就会出现循环引用,循环引用将导致脚本加载出错: ///Game.js var Item = require("Item"); var Game = ...
- python嵌套类(内部类相互调用)_核心解密Python函数在(类与函数之间)和(类与类之间)互相调用...
image.png 一.类与函数之间 首先来看一个函数间的调用 类方法: #实现类中函数之间互相调用 #下面一个学生的简单自我介绍为例子 __metaclass__=type #自由的.动态的修改/增 ...
- 两个类相互包含引用的问题--类前向声明
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; } clas ...
- 两个类相互包含对方成员的问题(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 ...
- java 继承调用_【JAVA学习】继承中函数调用机制
类(类的对象)在调用函数时,究竟哪一个函数被调用,是存在特定的机制的,现在我们来梳理下其步骤. 步骤一:当其调用一个函数的时候,编译器根据其声明的变量类型和调用的函数名字找到所有此"类&qu ...
- java 电池类类代码举例_下面哪个不是java中的关键字?
[简答题]Java的字符类型采用的是ASCII编码. [简答题]1. 介绍16日野外考察时,你的研究区的岩性,如果以该岩石制作岩样进行单轴压缩实验,请预估一下它的应力应变曲线的特征. [其它]乡村旅游 ...
最新文章
- 线上分享会预告之深度学习在3D场景中的应用
- vectorvn1610报价_德国Vector测试软件VN1610A-上海壹侨特价
- PS 技术篇-使用ps快速完成证件照片换背景色实例演示10s搞定!
- Windows Azure Tools DSInit Error
- 使用PHP时出现乱码,php出现乱码该怎么解决?
- 如何让mysql配置文件生效_mysql配置文件生效测试
- 1024程序员节:除了高薪,你还有什么理由坚持做程序员?
- 第 6 章 本地方法接口
- Java8 LocalDateTime和Date相互转换
- VS985破解电信4G或联通4G
- 【工业互联网】工业发展的痛点体现在哪里?如何整合边缘计算与云计算的优势来成就工业智能?
- 【考试总结贴】工程测量学
- NAS HomeAssistant
- 玉米社:抖音作品几大核心指标,完播率、点赞率、吸粉率多少算好?
- hibernate中各种不一样的查询hql,hqc(一)
- js正则验证人名,包含· | 手机号正则验证(199)
- autocad Objectarx 使用setWindowArea设置打印区域后,发现与实际打印出来的区域不一致的问题
- Ubuntu 安装shutter
- Python实现Chrome浏览器书签自动备份
- win7 vs2013 编译错误
热门文章
- 使用linux 的wget下载国外的域名的地址,下载不了,
- python判断输入的数字是完全平方还是三次方
- PPP Over Frame Relay配置
- GridView里的一点小功能:截取多余字符、改变鼠标经过行的样式
- php使用模版开发的实例,PHP-Web应用程序开发:使用模板_php
- 单片机sleep函数的头文件_单片机空项目代码解析
- php把数据创建一个表格,PHP创建(导出Excel数据表格)
- 信息学奥赛一本通 1114:白细胞计数 | OpenJudge NOI 1.9 08
- 信息学奥赛一本通 1057:简单计算器 | OpenJudge NOI 1.4 19
- 树的直径(51Nod-2602)