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与XML的PDF文档生成技术
Oct 09 PHP
实例(Smarty+FCKeditor新闻系统)
Jan 02 PHP
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
php实现把数组按指定的个数分隔
Feb 17 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
深入解析PHP中SESSION反序列化机制
Mar 01 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
laravel中的一些简单实用功能
Nov 03 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中的流(streams)浅析
2015/07/02 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
常用简易JavaScript函数
2009/04/09 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
Angular2 http jsonp的实例详解
2017/08/31 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
深入理解Python 多线程
2020/06/16 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
个人作风纪律整顿整改措施
2014/10/25 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2014年计生工作总结
2014/11/21 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
一起来学习Python的元组和列表
2022/03/13 Python