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 相关文章推荐
PHP4实际应用经验篇(9)
Oct 09 PHP
php5 and xml示例
Nov 22 PHP
php中使用Akismet防止垃圾评论的代码
Jun 10 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
Jun 09 PHP
PHP之短标签开启设置
Jun 17 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
destoon数据库表说明汇总
Jul 15 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
php 参数过滤、数据过滤详解
Oct 26 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
php 运算符与表达式详细介绍
Nov 30 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新手上路(十三)
2006/10/09 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
隐性调用php程序的方法
2015/06/13 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
javascript multibox 全选
2009/03/22 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
python实现批量下载新浪博客的方法
2015/06/15 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
《两个铁球同时着地》教学反思
2014/02/13 职场文书
北京申奥口号
2014/06/19 职场文书
体育课外活动总结
2014/07/08 职场文书
尊老爱亲美德少年事迹材料
2014/08/14 职场文书