从PHP的5.4.0版本开始,PHP提供了一种全新的代码复用的概念,那就是Trait。Trait其字面意思是"特性"、"特点",我们可以理解为,使用Trait关键字,可以为PHP中的类添加新的特性。
熟悉面向对象的都知道,软件开发中常用的代码复用有继承和多态两种方式。在PHP中,只能实现单继承。而Trait则避免了这点。下面通过简单的额例子来进行对比说明。
1. 继承 VS 多态 VS Trait
现在有Publish.php
和Answer.php
这两个类。要在其中添加LOG功能,记录类内部的动作。有以下几种方案:
- 继承
- 多态
- Trait
1.1. 继承
如图:
代码结构如下:
// Log.php <"htmlcode">// Publish.php <"htmlcode">// Answer.php <"" src="/UploadFiles/2021-04-02/201701050846522.png">实现代码:
// Log.php <"htmlcode">// Publish.php <"htmlcode">// Answer.php <"" src="/UploadFiles/2021-04-02/201701050846523.png">实现代码如下:
// Log.php <"htmlcode">// Publish.php <"htmlcode">// Answer.php <"htmlcode"><"htmlcode">public function protected function private function可以发现,Trait的作用域在引用该Trait类的内部是都可见的。可以理解为use关键字将Trait的实现代码Copy了一份到引用该Trait的类中。
3. Trait中属性的优先级
说到优先级,就必须要有一个对比的参照物,这里的参照对象时引用Trait的类及其父类。
通过以下的代码来证明Trait应用中的属性的优先级:
<"htmlcode">Publish::publicF public function Log::protectF protected function通过上面的例子,可以总结出Trait应用中的优先级如下:
来自当前类的成员覆盖了 trait 的方法
trait 覆盖了被继承的方法
类成员优先级为:
当前类>Trait>父类
4. Insteadof和As关键字
在一个类中,可以引用多个Trait,如下:
<"htmlcode"><"htmlcode">Log::startLog public function Check::parameterCheck parameter checkparams Check::startLog public function就如字面意思一般,
insteadof
关键字用前者取代了后者,as
关键字给被取代的方法起了一个别名。在引用Trait时,使用了use关键字,use关键字也用来引用命名空间。两者的区别在于,引用Trait时是在class内部使用的。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com桃源资源网 Design By www.nqtax.com暂无“php 5.4 全新的代码复用Trait详解”评论...P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。