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中CI操作多个数据库的代码
Jul 05 PHP
PHP父类调用子类方法的代码例子
Apr 09 PHP
php socket实现的聊天室代码分享
Aug 16 PHP
php字符串函数学习之substr()
Mar 27 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
PHP实现查询手机归属地的方法详解
Apr 28 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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
JAVA/JSP学习系列之六
2006/10/09 PHP
快速开发一个PHP扩展图文教程
2008/12/12 PHP
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
php实现通过ftp上传文件
2015/06/19 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
php集成开发环境详解
2019/09/24 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
Node连接mysql数据库方法介绍
2017/02/07 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
vue登录路由验证的实现
2017/12/13 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
python对视频画框标记后保存的方法
2018/12/07 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
python批量修改ssh密码的实现
2019/08/08 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
医学毕业生自荐信
2013/10/11 职场文书
饲料采购员岗位职责
2013/12/19 职场文书
教学实验楼管理制度
2014/02/01 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python