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的无限分类实现想法~
Jan 02 PHP
php购物网站支付paypal使用方法
Nov 28 PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
PHP多线程编程之管道通信实例分析
Mar 07 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
Feb 08 PHP
PHP中的函数声明与使用详解
May 27 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 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实现的九九乘法口诀表简洁版
2014/07/28 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
工作需要写的一个js拖拽组件
2011/07/28 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
js实现查询商品案例
2020/07/22 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
python连接池实现示例程序
2013/11/26 Python
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
python生成requirements.txt的两种方法
2019/09/18 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
商务邀请函范文
2014/01/14 职场文书
《中华少年》教学反思
2014/02/15 职场文书
新农村建设典型材料
2014/05/31 职场文书
年度评优评先方案
2014/06/03 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
群众路线调研报告范文
2014/11/03 职场文书
大学生支教感言
2015/08/01 职场文书
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android
Java中try catch处理异常示例
2021/12/06 Java/Android