摘要:什么是自起,实现了一种代码复用的方法,称为。是为了单继承语言而准备的一种代码复用机制。从基类继承的成员会被插入的成员所覆盖。中使用先将其重新命名,然后将新命名方法设置为私有,原中的方法可以正常访问。就是很好用的啦转载地址代码复用的方式
什么是 Trait?
自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 Trait。
Trait 是为了单继承语言而准备的一种代码复用机制。
Trait 和 Class 相似,它为传统的继承增加了水平的特性的组合,多个无关的 Class 之间不需要互相继承
Trait 使得无关的 Class 可以使用相同的属性和方法。
简单使用
echoHello(); echo $one->index(); echo $two->echoHello();
结果输出 Hello Trait index Hello Trait。
从基类继承的成员会被 Trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 Trait 的方法,而 Trait 则覆盖了被继承的方法。
echoHello(); echo $two->echoHello(); echo $base->echoHello();
结果输出 Hello One Hello Trait Hello Base。
class one 示例覆盖基类和 Trait Test,说明当前类的方法优先级高于他们。
class Two 示例覆盖基类,Trait 的有优先级高于继承的基类。
class Base 示例覆盖 Trait Test,说明当前类的方法优先级高于 Trait。
通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。
echoHello(); echo $one->echoWord();
结果输出 Hello word !。
如果两个 Trait 都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。
echoTest(); echo $one->echoWord(); echo $one->echoHello();
输出结果:Hello Test word Test Hello TestTwo。
使用 as 作为别名,即 Test::echoHello as echoTest; 输出 Trait Test 中的 echoHello.
使用 insteadof 操作符用来排除掉其他 Trait,即 Test::echoWord insteadof TestTwo; 输出的是 word Test,使用 Trait Test 中的 echoWord
修改 方法的控制权限
echoHello();
输出结果 Hello。
class one 中使用 as 将 echoHello 设为私有,则通过 class one 不能访问 echoHello。
class two 中使用 as 先将其重新命名,然后将新命名方法设置为私有,原 Trait 中的方法可以正常访问。
Trait 中还可以像类一样定义属性。就是很好用的啦!
转载地址 PHP 代码复用的方式
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/26095.html
摘要:和组合的语义定义了一种减少复杂性的方式,避免传统多继承和类相关典型问题。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短请求和相应的时间。同样的道理,根据引入不同的来完成对应的功能。 showImg(https://segmentfault.com/img/remote/1460000010868178); Trait 概念 在常规的 PHP 开发中,我们都习惯于先编写一...
摘要:是一种为类似的单继承语言而准备的代码复用机制。因为中的变量环境是基于函数的,所以会输出博客链接代码复用机制,本文后续如有更新将会在博客更新。 提到 php 的代码复用,我们可能第一时间会想到继承,但是这种单继承语言一旦派生的子类过多,那么会产生一系列的问题,比如依赖父类、耦合性太大、破坏了类的封装性。那么有没有更好的方法来实现代码复用呢? 自 PHP 5.4.0 起,PHP 实现了另外...
摘要:关于作者程序开发人员,不拘泥于语言与技术,目前主要从事和前端开发,使用和,端使用混合式开发。和组合的语义定义了一种减少复杂性的方式,避免传统多继承和类相关典型问题。它为传统继承增加了水平特性的组合也就是说,应用的几个之间不需要继承。 关于作者 程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,App端使用Apicloud混合式开发。合适和...
摘要:实现异步的方式有哪些提供了一些异步方法那它们底层是用哪种方式实现的呢实现异步的方式有线程方式进程方式复用线程方式和进程方式类似有异步请求时开一个线程或者进程获取到数据后线程间可以直接共享数据进程间可以通过进程通信机制,如共享内存管道等方式进 实现异步的方式有哪些? swoole提供了一些异步方法, 那它们底层是用哪种方式实现的呢? 实现异步的方式有: 线程方式 进程方式 IO复用 ...
阅读 3144·2023-04-26 02:33
阅读 3104·2023-04-25 21:33
阅读 908·2021-09-02 09:56
阅读 2911·2019-08-30 15:44
阅读 2461·2019-08-30 13:15
阅读 1036·2019-08-30 13:04
阅读 1635·2019-08-29 15:09
阅读 3958·2019-08-26 18:26