[TOC]
PHP 实现了一种代码复用的方法,称为 trait
https://www.php.net/trait
### 优先级:
当前类 会覆盖 trait ,trait会覆盖base类;
1、覆盖base
![](https://img.kancloud.cn/db/5b/db5bafeff9cb4b499d0987b725896a46_454x803.png)
2、当前覆盖trait
![](https://img.kancloud.cn/ad/da/adda6ca5c8883265754e9cdf68022745_417x677.png)
### 多个 trait
通过逗号分隔,在`use`声明列出多个 trait,可以都插入到一个类中。
![](https://img.kancloud.cn/1b/09/1b09e7857234df0dbbf8b68326551c84_482x867.png)
### 冲突的解决
如果两个 trait 都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。
为了解决多个 trait 在同一个类中的命名冲突,需要使用`insteadof`操作符来明确指定使用冲突方法中的哪一个。
以上方式仅允许排除掉其它方法,`as`操作符可以 为某个方法引入别名。 注意,`as`操作符不会对方法进行重命名,也不会影响其方法。
在本例中 Talker 使用了 trait A 和 B。由于 A 和 B 有冲突的方法,其定义了使用 trait B 中的 smallTalk 以及 trait A 中的 bigTalk。
Aliased\_Talker 使用了`as`操作符来定义了`talk`来作为 B 的 bigTalk 的别名。
![](https://img.kancloud.cn/c6/fc/c6fc3ddbbafa575171f31b3647c7f1c3_424x733.png)
![](https://img.kancloud.cn/77/a2/77a2be61de657db11dbb5149035c8bce_393x210.png)
### 修改方法的访问控制
![](https://img.kancloud.cn/df/c4/dfc40ea19f833cd70ebd7da1859933c5_643x551.png)
### 从 trait 来组成 trait
在 trait 定义时通过使用一个或多个 trait,能够组合其它 trait 中的部分或全部成员。
![](https://img.kancloud.cn/80/5d/805d086e8be9aff8eef2e7972886f428_428x879.png)
### Trait 的静态成员
#### 静态变量
![](https://img.kancloud.cn/c5/19/c519606d89f4edaa778446dbb7f37859_497x603.png)
#### 静态方法
![](https://img.kancloud.cn/87/04/8704ab4ba840098d6bc23cfb09b9ec8d_485x412.png)
#### 静态属性
![](https://img.kancloud.cn/5b/d9/5bd9214f423c319c34d1797907c6b37a_410x346.png)
- 消息队列
- 为什么要用消息队列
- 各种消息队列产品的对比
- 消息队列的优缺点
- 如何保证消息队列的高可用
- 如何保证消息不丢失
- 如何保证消息不会重复消费?如何保证消息的幂等性?
- 如何保证消息消费的顺序性?
- 基于MQ的分布式事务实现
- Beanstalk
- PHP
- 函数
- 基础
- 基础函数题
- OOP思想及原则
- MVC生命周期
- PHP7.X新特性
- PHP8新特性
- PHP垃圾回收机制
- php-fpm相关
- 高级
- 设计模式
- 排序算法
- 正则
- OOP代码基础
- PHP运行原理
- zavl
- 网络协议new
- 一面
- TCP和UDP
- 常见状态码和代表的意义以及解决方式
- 网络分层和各层有啥协议
- TCP
- http
- 二面
- TCP2
- DNS
- Mysql
- 锁
- 索引
- 事务
- 高可用?高并发?集群?
- 其他
- 主从复制
- 主从复制数据延迟
- SQL的语⾔分类
- mysqlQuestions
- Redis
- redis-question
- redis为什么那么快
- redis的优缺点
- redis的数据类型和使用场景
- redis的数据持久化
- 过期策略和淘汰机制
- 缓存穿透、缓存击穿、缓存雪崩
- redis的事务
- redis的主从复制
- redis集群架构的理解
- redis的事件模型
- redis的数据类型、编码、数据结构
- Redis连接时的connect与pconnect的区别是什么?
- redis的分布式锁
- 缓存一致性问题
- redis变慢的原因
- 集群情况下,节点较少时数据分布不均匀怎么办?
- redis 和 memcached 的区别?
- 基本算法
- MysqlNew
- 索引new
- 事务new
- 锁new
- 日志new
- 主从复制new
- 树结构
- mysql其他问题
- 删除
- 主从配置
- 五种IO模型
- Kafka
- Nginx
- trait
- genergtor 生成器
- 如何实现手机扫码登录功能
- laravel框架的生命周期