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 相关文章推荐
windows下PHP APACHE MYSQ完整配置
Jan 02 PHP
不错的一篇面向对象的PHP开发模式(简写版)
Mar 15 PHP
php SQL Injection with MySQL
Feb 27 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
PHP两种快速排序算法实例
Feb 15 PHP
php提高网站效率的技巧
Sep 29 PHP
laravel学习教程之关联模型
Jul 30 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
PHP手机号码及邮箱正则表达式实例解析
Jul 11 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中cookie的作用域
2008/03/27 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
python中反射用法实例
2015/03/27 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
Django实现快速分页的方法实例
2017/10/22 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
python多线程实现TCP服务端
2019/09/03 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
英语翻译系毕业生求职信
2013/09/29 职场文书
开会迟到检讨书
2014/01/08 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
离婚起诉书范本
2015/05/18 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
对学校的意见和建议
2015/06/04 职场文书
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL