本文给出了一个例子来说明PHP Trait代码重用类和多重继承的实现。分享给大家参考,如下:
前言
众所周知,PHP和很多语言一样,一直是单一的继承语言。然而,在编码过程中,我们经常需要在当前类中使用两个或更多的其他类。在这种情况下,继承无法实现,很多要使用的类经常被new实例化,这将极大地影响代码结构和开发规范。于是,Trait类诞生了,这是一种代码重用语法,可以实现在一个类中引用多个其他类的方法。
一.概念
在PHP的官方手册中,Trait被描述为像PHP这样的单一继承语言的代码重用机制。为了减少单一继承语言的限制,Trait使开发人员能够在不同层次的独立类中自由重用方法。Trait和Class组合的语义定义了一种降低复杂性的方法,避免了传统多重继承和Mixin类相关的典型问题。Trait类似于Class,但目的只是以细粒度和一致的方式组合功能。它不能由特质本身来实例化。它为传统传承增添了横向特征的结合;也就是说,不需要在应用程序的几个类之间进行继承。
二,特质类的使用
简单来说,trait是一种不同于继承的语法,它定义了一个Trait类,并在其他类中使用了use关键字,这有点类似于使用namespace,但含义不同。在用use关键字将Trait类引入一个类后,相当于要求或包含一段代码。不同的是,使用的Trait类和当前类可以看作是同一个类,即当前类可以用$this关键字调用Trait类的方法。
以下是原理解释:
可以看出,当前类可以简单地使用两个Trait类,并调用其中的方法,而不仅仅是继承,它只能使用一个父类的方法。
三.特质类的访问控制
我们知道,在继承的方式中,如果基类由私有修改控制,子类就不能被调用。但是Trait就不一样了,因为它和当前类中的Require类似,所以不管是公有的、受保护的还是私有的,都可以直接使用。例子如下:
四.特质类的优先控制
Trait类、当前使用的类和继承的基类之间的调用优先级顺序如下:Trait类继承的当前使用的基类
当存在同名方法时,同名类将根据优先级被覆盖。具体例子如下:
1.特征类覆盖基类
2.目前的课程包括特质课程
动词(verb的缩写)多特质类的冲突控制
在PHP中,如果当前类使用两个trait类,并且两个Trait类都有一个同名的方法,那么如果冲突没有被显式解决,就会出现致命错误。在这种情况下,PHP官方给出了两种解决方案:1。insteadof关键字:使用此关键字指定当方法名冲突时应该使用哪个Trait类方法,即如果c类使用两个Trait类a和b,并且两个类都有a和b方法,那么在c类使用类a和b时使用insteadof来声明冲突解决方案:
用A、B { B:a代替A;//当一个方法冲突时,用B类的方法代替A:b代替B;//当方法冲突时,使用a类的b方法代替b类的方法。}2.as关键字:同名的方法通过as关键字被指定为别名,并且只在当前类中起作用。例子如下:
使用A、B { B:a作为c;//声明b类的方法a是c,作用于该类的a :3360 bas d;//声明A类的B方法是D,作用于这个类。} VI。继承和直接实例化的区别
对于一个类需要使用另一个或多个类的方法的现状,我们一般会想到继承和直接实例化另一个或多个类等方法。让我们比较一下这些方法和Trait类的区别:1。继承模式:对于继承,另一个类的一些方法可以完美复用,但是对于需要复用多个类的方法,PHP不支持多重继承,只能访问公共和受保护的方法;2.与直接实例化的区别:我们也可以直接实例化当前类中要使用的A类和B类,但是这个方法与控件访问范围相反,只允许访问A类和B类中公共的方法;3.使用Trait类将A类和B类的方法完全导入到当前类中,可以看作是当前类的一部分。唯一的区别是同名的方法可以存在于当前类中,由优先级顺序控制。
补充:PHP多继承示例
基类{公共函数SayHello(){ echo ' hello ';} } trait SayWorld { public function SayHello(){ parent :3360 SayHello();回声'世界'。PHP _ EOL} } trait SayWorld2 { public function sayhello 2(){ echo ' PHP }。PHP _ EOL} }类MyHelloWorld扩展了Base{ use SayWorld,SayWorld 2;} $ s=new MyHelloWorld();$ s-SayHello();$ s-sayhello 2();输出结果:
hello worldPHP
更多对PHP相关内容感兴趣的读者可以查看本网站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》、《php常见数据库操作技巧汇总》、0103010
希望本文对PHP编程有所帮助。