总结
PHP中有一个代码复用的技术,因为单一继承的问题,有些公共方法不能写在父类中,但是Trait可以应对这种情况,它可以定义一些复用的方法,然后引入到你需要使用的类中。
刚开始的时候给我的感觉是把特质代码块直接拿到类里,后来发现我太天真了。
PHP :中的特征用法
问题
第一次用的时候,因为一直用抽象类,或者定义内部对象,然后在内部对象中调用方法,所以当时有以下问题。
1.可以介绍多个吗,如果可以,如何处理同名方法
2.当引入的方法与现有方法同名时如何解决
3.你能定义抽象方法吗,因为有些方法需要知道什么时候使用。在抽象类中,这种情况通常通过调用抽象方法来解决
4.你能定义字段吗
5.字段或方法可以被定义为静态的吗
6.你能控制方法的权威性吗
回答问题
1.可以引入多条轨道。当多个trais中有同名的方法时,您需要指定使用哪个方法,如下所示:
2.当引入的方法与已有方法同名时,将优先调用类中定义的方法,其优先级顺序为:当前类方法特征方法父类方法
3.抽象方法可以用与抽象类相同的语法在TRAIT中定义
4.字段可以用与类相同的语法在4.trait中定义
5.您可以定义静态方法和静态字段
6.可以控制方法权限
7.此外,还可以在特征代码块中引入其他特征代码块,语法与类相同。
摘要
此时,我发现了一个新问题。这种特质和抽象类有什么区别?说什么代码复用,这不就是多重继承吗?特质类和抽象类有功能上的区别吗?抽象类能做的,特质也能做。
想了想,觉得有一些区别。虽然它们看起来很像,功能也很相似,就像抽象类和接口一样(虽然它们不同,但接口不能定义方法),接口更侧重于定义一套通用的方法和一种规范,而抽象类则侧重于将通用方法从子类中分离出来,提高代码重用性。
特质和抽象类的侧重点也不同
Trait专注于定义共享代码片段。它不关心引用这个片段的类做什么。只要你需要,你可以把它拿走。简单来说,它不约束类的类型,只定义方法
抽象类是不同的。既然你继承了我,你必须和我做同样的事情。您不能抽象类来与数据库交互,但是您的子类可以编写脚本。因此,抽象类更注重类型约束,而不是特质。
以上是边肖介绍的关于Trait在PHP中的用法的详细讲解和整合,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!