traits 是将一段代码 引入 类中 使用,是的代码(属性和方法)可以更加灵活的被复用。

那么什么使用需要 使用大 trait?

设想一下,加入有父类两个类 同时需要 相同的方法和属性,应该怎么办?我们都知道 父类是不可能 继承父类的,而这个时候,trait就派上用场了。

实际写一下代码吧。

<?php
header('content-Type:text/html;charset=utd-8');//防止中文乱码必备
trait ta{public function aa(){echo 'aa';}
}
//忽略这trait往下看class people {public $name='野原小葵';public $sex='女';public $iq='-5';public $blog='dir321.com';public function say($food){echo $this->name=$name;}
}
//这里我们写了 两个 父类 people people2
//此时有一个方法  public function aa(){echo 'aa';} //people people2 都需要这个方法时 我们要怎么办?
//很简单 我们只需要引入 trait 中的代码就可以了
class people2 {public function say($food){echo $this->name=$name;}//现在我们在这里 引入 trait中的代码use ta;
}
// 下面我们来看看 引入是否 成功
$xiaoxin=new people2();
$xiaoxin->aa();
//你会发现成功输出了 ta中的aa  这就是 trait最简单的用法。这里我们 只用people2引入了ta,people同时也可以引入,引入方法和people2的引入方法一样。这样 就成功实现了两个或多个父类同时共用方法和属性。
?>

//好了 继续 如果 来看一下 trait的优先级吧

<?php
//这里拿 两个类 来举例子 一个父类 people 和子类 child
trait ta{public function aa(){echo 'aa';
}
}
class people{public function aa(){echo 'aa';
}
use ta;
}
class child extends people{public function aa(){echo 'aa';
}
use ta;
}
$xiaoming=new child();
$xiaoming ->aa();
//这里我们 实例化 子类 现在 输出的aa,是谁的aa呢? 父类的aa 还是父类中use的aa ?子类的aa 还是子类中use的aa?
//我们分析一下吧 首先子类中重写了父类中的aa方法,很显然执行的是 子类中的aa
//这样我们就可以确定,本类中的方法优先级高于 use引入的trait中的方法。
?>

//我们 继续使用这段代码 再来试验一下


<?php
trait ta{public function aa(){echo 'aa';
}
}
class people{public function aa(){echo 'aa';
}
use ta;
}
class child extends people{//public function aa(){//echo 'aa';
//}
//这里我们注释掉 子类中的aa 方法 但是保留 use引入的 tarit中的方法,现在再来看看优先级吧。
use ta;
}
$xiaoming=new child();
$xiaoming ->aa();
//很明显 这里 输出的aa  是 use引入的trait 中的aa方法,因为 use ta 中的代码与父类中的aa方法相同
//也就是说 相当于重写了 父类中的aa方法。
?>

再继续 看看 其他问题 ,如何引入多个 trait

<?php
//这里我们写了 两个 trait 看看如何引入
trait ta{public function aa(){echo 'aa';}
}
trait tb{public function bb(){echo 'b';}
}
class people{public function aa(){echo 'aa';
}
//usr 逗号分割 trait名称 即可
use ta,tb;
}
class child extends people{//public function aa(){//echo 'aa';
//}use ta;
}
$xiaoming=new child();
$xiaoming ->aa();
//尝试输出一下
$xiaoming->bb();?>

OK 在线 就太长太多了 trait其他的一些 特性 我会放到之后的文章里。

PHP中traits是用来干嘛的?trait的语法,作用,特点。相关推荐

  1. python中类里self_Python类中的self到底是干啥的

    Python类中的self到底是干啥的 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的 ...

  2. k2000显卡相当于gtx_电脑中的显卡是什么样干什么样的?NVDIA推出的两块Quadro显卡K1000M和K2000M性能究竟差多少...

    在上一篇文章中,小编为您详细介绍了关于<求一款可畅玩英雄联盟的显卡200?黑莓9000刷不动了拿去修>相关知识.本篇中小编将再为您讲解标题电脑中的显卡是什么样干什么样的?NVDIA推出的两 ...

  3. php 中 Traits 详解

    PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法.php的Traits和Go语言的组合功能有点类似, 通过在类中使用use关键字声明要组合的Tr ...

  4. pandas使用groupby函数计算dataframe数据中每个分组的滚动统计值(rolling statistics)的语法:例如分组的N天滚动平均值、滚动中位数、滚动最大最小值、滚动加和等

    pandas使用groupby函数计算dataframe数据中每个分组的滚动统计值(rolling statistics)的语法:例如分组的N天滚动平均值.滚动中位数.滚动最大最小值.滚动加和等 目录

  5. [react] React中你有使用过propType吗?它有什么作用?

    [react] React中你有使用过propType吗?它有什么作用? 校验属性的合法性 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起通 ...

  6. [react] React中你有使用过getDefaultProps吗?它有什么作用?

    [react] React中你有使用过getDefaultProps吗?它有什么作用? createReactClass 参数对象内的一个方法,用于初始化组件属性 我是歌谣,欢迎和大家一起交流前后端知 ...

  7. 【DB笔试面试755】在Oracle的DG中,RFS、LNSn、MRP、LSP进程的作用分别是什么?

    ♣ 题目部分 在Oracle的DG中,RFS.LNSn.MRP.LSP进程的作用分别是什么? ♣ 答案部分 这几个进程是DG结构中日志传输.接受和应用的关键性进程,下面分别介绍这几个进程. (一)RF ...

  8. 39.在Java中定义一个不做事且没有参数的构造方法的作用?

    1 在Java中定义一个不做事且没有参数的构造方法的作用 Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会 调用父类中"没有参数的构造方法&quo ...

  9. Docker中,diff和merged这两个文件夹的作用

    Docker中,diff和merged这两个文件夹的作用 在Docker中,diff和merged这两个文件夹都是与容器的文件系统相关的.它们的作用分别是: 1.diff文件夹 diff文件夹包含了容 ...

最新文章

  1. Python中非常有用的三个数据科学库
  2. 【转】vfork 和 fork的区别
  3. 创建本地yum源的方法
  4. 【转】大型网站系统架构演化之路
  5. 【Time系列三】简单的计时器(秒表)
  6. python 入门学习篇(一),呵呵呵
  7. 【实战 Ids4】║ 控制台密码模式搭配Ocelot网关
  8. 林文信12小时学会流行键盘基础教程-爱奇艺链接地址
  9. 电力系统非线性控制_电力系统保护与控制2020年第13期目录
  10. 网站攻击有哪几种方式?如何处理
  11. 特征工程(Feature Engineering)
  12. Java学习笔记22:并发(2)
  13. 硬件安全之ARM体系架构的演进
  14. EmberZNet EFR32 OTA 注意点
  15. Python两种方式求多个数的最大公因数(HCF)和最小公倍数(LCM)
  16. 统计学发展过程中有哪些主要学派?其学术观点是什么?主要代表人物及其对统计学的贡献有哪些?
  17. mulesoft MCIA 常用词汇、知识点汇总
  18. P2404 自然数的拆分问题
  19. 【人工智能】Benchmark、SOTA、Baseline
  20. 如何使用ROS 控制桌面机械手Dobot魔术师?

热门文章

  1. Python 五种图片相似度比较方法
  2. 解决:git clone --depth=1 -q -b fix/ie-cannot-input-korean git://github.com/sohee-lee7/Squire.git
  3. 【定位问题】基于CC和GCC算法实现近场声源定位TDOA问题附matlab代码
  4. 在应用图标右上角显示数字
  5. AI:颠覆医疗行业的新技术
  6. 到底是该打工还是该创业?
  7. java基于SSM框架的洗车店预约系统的设计与实现
  8. capsule 安装_Capsule:开源的 JVM 应用部署工具
  9. 库客音乐骤变:加码音乐教育业务,版权相关业务收入大幅下滑
  10. 第十四篇 数据分析案例