PHP的Trait机制原理与用法分析


Posted in PHP onOctober 18, 2019

本文实例讲述了PHP的Trait机制原理与用法。分享给大家供大家参考,具体如下:

Trait介绍:

1、自PHP5.4起,PHP实现了一种代码复用的方法,称为trait。
2、Trait是为类似PHP的单继承语言二准备的一种代码复用机制。
3、Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。
4、trait实现了代码的复用,突破了单继承的限制;
5、trait是类,但是不能实例化。
6、当类中方法重名时,优先级,当前类>trait>父类;
7、当多个trait类的方法重名时,需要指定访问哪一个,给其它的方法起别名。

示例:

trait Demo1{
 public function hello1(){
  return __METHOD__;
 }
}
trait Demo2{
 public function hello2(){
  return __METHOD__;
 }
}
class Demo{
 use Demo1,Demo2;//继承Demo1和Demo2
 public function hello(){
  return __METHOD__;
 }
 public function test1(){
  //调用Demo1的方法
  return $this->hello1();
 }
 public function test2(){
  //调用Demo2的方法
  return $this->hello2();
 }
}
$cls = new Demo();
echo $cls->hello();
echo "
";
echo $cls->test1();
echo "
";
echo $cls->test2();

运行结果:

Demo::hello
Demo1::hello1
Demo2::hello2

多个trait方法重名:

trait Demo1{
 public function test(){
  return __METHOD__;
 }
}
trait Demo2{
 public function test(){
  return __METHOD__;
 }
}
class Demo{
 use Demo1,Demo2{
  //Demo1的hello替换Demo2的hello方法
  Demo1::test insteadof Demo2;
  //Demo2的hello起别名
  Demo2::test as Demo2test;
 }
 public function test1(){
  //调用Demo1的方法
  return $this->test();
 }
 public function test2(){
  //调用Demo2的方法
  return $this->Demo2test();
 }
}
$cls = new Demo();
echo $cls->test1();
echo "
";
echo $cls->test2();

运行结果:

Demo1::test
Demo2::test

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
十天学会php之第一天
Oct 09 PHP
php生成WAP页面
Oct 09 PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
php生成数字字母的验证码图片
Jul 14 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
ThinkPHP实现分页功能
Apr 28 PHP
使用Zttp简化Guzzle 调用
Jul 02 PHP
基于php流程控制语句和循环控制语句(讲解)
Oct 23 PHP
PHP实现考试倒计时功能代码
Apr 16 PHP
tp5修改(实现即点即改)
Oct 18 #PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 #PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 #PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 #PHP
tp5.1 实现setInc字段自动加1
Oct 18 #PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 #PHP
thinkphp5 模型实例化获得数据对象的教程
Oct 18 #PHP
You might like
php桌面中心(二) 数据库写入
2007/03/11 PHP
php仿ZOL分页类代码
2008/10/02 PHP
php连接mysql数据库代码
2009/03/10 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
logging level级别介绍
2020/02/21 Python
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
运动会入场词100字
2014/02/06 职场文书
语文教学随笔感言
2014/02/18 职场文书
领导失职检讨书
2014/02/24 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
Redis中一个String类型引发的惨案
2021/07/25 Redis