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+MySQL的聊天室设计
Oct 09 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
Sep 21 PHP
PHP7 其他修改
Mar 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运行环境配置的详解
2013/06/04 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
jQuery实现日历效果
2020/09/11 jQuery
python数字图像处理实现直方图与均衡化
2018/05/04 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
python矩阵的转置和逆转实例
2018/12/12 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
django下创建多个app并设置urls方法
2020/08/02 Python
Python读写锁实现实现代码解析
2020/11/28 Python
演讲稿开场白
2014/01/13 职场文书
班组长竞聘书
2014/03/31 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
公司捐书倡议书
2015/04/27 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书