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安装攻略:常见问题解答(一)
Oct 09 PHP
dedecms中显示数字验证码的修改方法
Mar 21 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
解析posix与perl标准的正则表达式区别
Jun 17 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
php获取flash尺寸详细数据的方法
Nov 12 PHP
Laravel学习教程之从入口到输出过程详解
Aug 27 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 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,ajax实现分页
2008/03/27 PHP
PHP 日期加减的类,很不错
2009/10/10 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
非常实用的12个jquery代码片段
2015/11/02 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
详解jQuery中的事件
2016/12/14 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python 中的 else详解
2016/04/23 Python
python 定时修改数据库的示例代码
2018/04/08 Python
详解Python打包分发工具setuptools
2019/08/05 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
农田水利实习自我鉴定
2013/09/19 职场文书
汉语言文学职业规划
2014/02/14 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
商场消防安全责任书
2014/07/29 职场文书
转让协议书范本
2014/09/13 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
社团个人总结范文
2015/03/05 职场文书
不同意离婚上诉状
2015/05/23 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书