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脚本的10个技巧(7)
Oct 09 PHP
PHP 基于文件头的文件类型验证类函数
May 01 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
php变量范围介绍
Oct 15 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
Jun 08 PHP
取得单条网站评论以数组形式进行输出
Jul 28 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
php接口实现拖拽排序功能
Apr 23 PHP
PHP实现文字写入图片功能
Feb 18 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 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下删除一篇文章生成的多个静态页面
2010/08/08 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
使用js+jquery实现无限极联动
2013/05/23 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
Python Paramiko模块的安装与使用详解
2016/11/18 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
使用HTML5进行SVG矢量图形绘制的入门教程
2016/02/19 HTML / CSS
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
一道Delphi上机题
2012/06/04 面试题
大学毕业自我鉴定范文
2014/02/03 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
Python采集股票数据并制作可视化柱状图
2022/04/04 Python