PHP之认识(二)关于Traits的用法详解


Posted in PHP onApril 11, 2019

PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法。Traits的出现解决了这一问题。

1、通过在类中使用use关键字声明要组合的Trait名称,而具体某个Trait的声明使用trait关键词,Trait不能直接实例化。具体用法:

<?php
trait Person{
	public $name="person";
	public function talk(){
		echo "我是{$this->name}<br/>";
	}
}
class Teacher{
	public function speak(){
		echo "我能教书<br/>";
	}
}
class Student extends Teacher{
	use Person;
	public function study(){
		echo "我需要学习<br/>";
	}
}
$student = new Student();
$student->talk();
$student->speak();
$student->study();
?>

2、Trait、父类和本类中都存在某个同名的属性或者方法是,会保留哪一个?

<?php
trait Person{
	public $name="person";
	public function talk(){
		echo "我是{$this->name}<br/>";
	}
	 public function hello() {
    echo "hello Person<br/>";
  }
}
class Teacher{
	public function talk(){
		echo "我能教书<br/>";
	}
	 public function hello() {
    echo "hello Teacher<br/>";
  }
}
class Student extends Teacher{
	use Person;
	public function talk(){
		echo "我需要学习<br/>";
	}
}
$student = new Student();
$student->talk();
$student->hello();

结果输出

我需要学习
hello Person

由结果可知

//trait的方法覆盖了基类Person中的方法,所以Person中的方法hello和speak被覆盖
//当方法或属性同名时,当前类中的方法会覆盖 trait的方法,所以此处talk会覆盖trait中的talk

3、如果多个Trait中包含同名方法或者属性时,会怎样呢?答案是当组合的多个Trait包含同名属性或者方法时,需要明确声明解决冲突,否则会产生一个致命错误。使用insteadof和as操作符来解决冲突,insteadof是使用某个方法替代另一个,而as是给方法取一个别名

以上所述是小编给大家介绍的PHP Traits的用法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP has encountered an Access Violation 错误的解决方法
Jan 17 PHP
PHP 文件系统详解
Sep 13 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
Nov 17 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
PHP最常用的正则表达式
Feb 13 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 #PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 #PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 10 #PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 #PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 10 #PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 #PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 10 #PHP
You might like
php实现的MySQL通用查询程序
2007/03/11 PHP
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
javascript forEach通用循环遍历方法
2010/10/11 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
Python检测数据类型的方法总结
2019/05/20 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
工厂门卫岗位职责范本
2014/04/04 职场文书
安全生产年活动总结
2014/08/29 职场文书
商业计划书之服装
2019/09/09 职场文书