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常用代码
Nov 23 PHP
实例(Smarty+FCKeditor新闻系统)
Jan 02 PHP
php设计模式之简单工厂模式详解
Sep 04 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
php数组键名技巧小结
Feb 17 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
PHP 前加at符合@的作用解析
Jul 31 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
PHP实现腾讯短网址生成api接口实例
Dec 08 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
Python实现程序的单一实例用法分析
2015/06/03 Python
Django框架下在视图中使用模版的方法
2015/07/16 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python模拟实现分发扑克牌
2020/04/22 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
2014社区健康教育工作总结
2014/12/16 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
小孩不笨观后感
2015/06/03 职场文书
高二语文教学反思
2016/02/16 职场文书