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 相关文章推荐
一个ORACLE分页程序,挺实用的.
Oct 09 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
php跨站攻击实例分析
Oct 28 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
PHP中COOKIES使用示例
Jul 26 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
使用ucenter实现多站点同步登录的讲解
Mar 21 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 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将数据库导出成excel的方法
2010/05/07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
python基础教程之匿名函数lambda
2017/01/17 Python
在python 中实现运行多条shell命令
2019/01/07 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python调试神器PySnooper的使用
2019/07/03 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
素食餐饮项目创业计划书
2014/02/02 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
2015年敬老月活动总结
2015/03/27 职场文书