宝哥软件园

浅谈特性在PHP中的使用

编辑:宝哥软件园 来源:互联网 时间:2021-08-26

总结

PHP中有一个代码复用的技术,因为单一继承的问题,有些公共方法不能写在父类中,但是Trait可以应对这种情况,它可以定义一些复用的方法,然后引入到你需要使用的类中。

刚开始的时候给我的感觉是把特质代码块直接拿到类里,后来发现我太天真了。

PHP :中的特征用法

问题

第一次用的时候,因为一直用抽象类,或者定义内部对象,然后在内部对象中调用方法,所以当时有以下问题。

1.可以介绍多个吗,如果可以,如何处理同名方法

2.当引入的方法与现有方法同名时如何解决

3.你能定义抽象方法吗,因为有些方法需要知道什么时候使用。在抽象类中,这种情况通常通过调用抽象方法来解决

4.你能定义字段吗

5.字段或方法可以被定义为静态的吗

6.你能控制方法的权威性吗

回答问题

1.可以引入多条轨道。当多个trais中有同名的方法时,您需要指定使用哪个方法,如下所示:

2.当引入的方法与已有方法同名时,将优先调用类中定义的方法,其优先级顺序为:当前类方法特征方法父类方法

3.抽象方法可以用与抽象类相同的语法在TRAIT中定义

4.字段可以用与类相同的语法在4.trait中定义

5.您可以定义静态方法和静态字段

6.可以控制方法权限

7.此外,还可以在特征代码块中引入其他特征代码块,语法与类相同。

摘要

此时,我发现了一个新问题。这种特质和抽象类有什么区别?说什么代码复用,这不就是多重继承吗?特质类和抽象类有功能上的区别吗?抽象类能做的,特质也能做。

想了想,觉得有一些区别。虽然它们看起来很像,功能也很相似,就像抽象类和接口一样(虽然它们不同,但接口不能定义方法),接口更侧重于定义一套通用的方法和一种规范,而抽象类则侧重于将通用方法从子类中分离出来,提高代码重用性。

特质和抽象类的侧重点也不同

Trait专注于定义共享代码片段。它不关心引用这个片段的类做什么。只要你需要,你可以把它拿走。简单来说,它不约束类的类型,只定义方法

抽象类是不同的。既然你继承了我,你必须和我做同样的事情。您不能抽象类来与数据库交互,但是您的子类可以编写脚本。因此,抽象类更注重类型约束,而不是特质。

以上是边肖介绍的关于Trait在PHP中的用法的详细讲解和整合,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

更多资讯
游戏推荐
更多+