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 相关文章推荐
使用TinyButStrong模板引擎来做WEB开发
Mar 16 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
php中读写文件与读写数据库的效率比较分享
Oct 19 PHP
dedecms中使用php语句指南
Nov 13 PHP
php实现事件监听与触发的方法
Nov 21 PHP
PHP中mysql_field_type()函数用法
Nov 24 PHP
PHP简单实现断点续传下载的方法
Sep 25 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
Twig模板引擎用法入门教程
Jan 20 PHP
Thinkphp单字母函数使用指南
May 08 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
PHP实现简单日历类编写
Aug 28 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
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
Js实现滚动变色的文字效果
2014/06/16 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
python查找第k小元素代码分享
2013/12/18 Python
python re模块findall()函数实例解析
2018/01/19 Python
python爬虫之遍历单个域名
2019/11/20 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
德国机车企业:FC-Moto
2017/10/27 全球购物
初级Java程序员面试题
2016/03/03 面试题
文明家庭先进事迹材
2014/01/27 职场文书
企业趣味活动方案
2014/08/21 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
调解书格式范本
2015/05/20 职场文书
灵魂歌王观后感
2015/06/17 职场文书
MySQL 数据类型详情
2021/11/11 MySQL