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 SQL之where语句生成器
Mar 24 PHP
利用PHP+JS实现搜索自动提示(实例)
Jun 09 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
php中array_column函数简单实现方法
Jul 11 PHP
PHP Cookie学习笔记
Aug 23 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
laravel中命名路由的使用方法
Feb 24 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 PHP
PHP 文件上传限制问题
Sep 01 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 PHP
php传值和传引用的区别点总结
Nov 19 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
php导出word格式数据的代码实例
2013/11/25 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
微信access_token的获取开发示例
2015/04/16 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python编写一个闹钟功能
2017/07/11 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
django框架cookie和session用法实例详解
2019/12/10 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
篮球比赛口号
2014/06/10 职场文书
阅兵口号
2014/06/19 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
工作证明英文模板
2014/10/21 职场文书
初中化学教学反思
2016/02/22 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python