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 全局变量范围分析
Aug 07 PHP
php+mysql 实现身份验证代码
Mar 24 PHP
php 数组使用详解 推荐
Jun 02 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
PHP比你想象的好得多
Nov 27 PHP
php通过前序遍历树实现无需递归的无限极分类
Jul 10 PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
PHP未登录自动跳转到登录页面
Dec 21 PHP
Python中使用django form表单验证的方法
Jan 16 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翻页类
2009/06/01 PHP
php获取淘宝分类id示例
2014/01/16 PHP
帝国cms目录结构分享
2015/07/06 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
区优秀教师事迹材料
2014/02/10 职场文书
大学军训感言800字
2014/02/27 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
个人政治思想总结
2015/03/05 职场文书
2014年终个人总结报告
2015/03/09 职场文书
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL