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 面向对象实现代码
Nov 11 PHP
PHP 日志缩略名的创建函数代码
May 26 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
php有效防止同一用户多次登录
Nov 19 PHP
WordPress开发中的get_post_custom()函数使用解析
Jan 04 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
PHP文件操作实例总结
Sep 27 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
php进行md5加密简单实例方法
Sep 19 PHP
解决laravel查询构造器中的别名问题
Oct 17 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
php魔术变量用法实例详解
2014/11/13 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
如何用javascript计算文本框还能输入多少个字符
2015/07/29 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
Javascript的this详解
2019/03/23 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
web.py获取上传文件名的正确方法
2014/08/26 Python
Python实现建立SSH连接的方法
2015/06/03 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
厨师岗位职责
2013/11/12 职场文书
协议书怎么写
2014/04/21 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书