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 相关文章推荐
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 PHP
ThinkPHP实现多数据库连接的解决方法
Jul 01 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
PHPStorm+XDebug进行调试图文教程
Jun 13 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
php二维码生成以及下载实现
Sep 28 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 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 max_execution_time执行时间问题
2011/07/17 PHP
PHP安全上传图片的方法
2015/03/21 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
Python正则表达式使用经典实例
2016/06/21 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
Python发展简史 Python来历
2019/05/14 Python
python实现ip代理池功能示例
2019/07/05 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
python opencv实现简易画图板
2020/08/27 Python
Spy++的使用方法及下载教程
2021/01/29 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
社区庆中秋节活动方案
2014/02/07 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
远程教育学习心得体会
2016/01/23 职场文书
2016年情人节广告语
2016/01/28 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python