PHP 中 Trait 和抽象类之间的区别
2022-08-30 10:11:29
Traits 允许您在类之间共享代码,而无需强制您进入特定的类层次结构。假设你希望所有的类都有方便的实用方法;没有特质,你有两个选择:foo($bar)
这两种解决方案都不理想,每种解决方案都有不同的权衡。代码冗余显然是不可取的,从共同的祖先继承会使类层次结构设计不灵活。
Traits 通过允许您实现每个类可以单独“导入”的特征来解决此问题,同时仍然允许您根据业务逻辑要求(而不是语言必要性)设计类层次结构。foo($bar)
不完全是。。。为此,让我们引用官方文档:
Trait 类似于类,但仅用于以细粒度和一致的方式对功能进行分组。无法自行实例化 Trait。它是传统继承的补充,可以水平组合行为;也就是说,在不需要继承的情况下应用类成员。
因此,Traits用于组合目的,以使类能够执行某些逻辑/行为。如果您从另一个/抽象类继承,它通常用于多态性,并且您获得不同的继承/类层次结构,这可能是也可能不是可取的。
我认为这一切都取决于上下文,架构以及你到底想做什么。