sim*_*mon 30 php abstract-class traits
我最近在PHP中遇到了Traits,我正试图理解它们.在我的研究期间,我偶然发现了Stack Overflow这个问题:Traits vs. Interfaces.接受的答案提到以下内容:
接口定义了实现类必须实现的一组方法.
当使用特征时,方法的实现也会出现 - 这在接口中不会发生.
到目前为止这么好,但这听起来就像接口和抽象类之间的区别.所以这为我提出了一个后续问题:
我知道我只能从一个抽象类扩展,另一方面可以使用任何数量的特征.但这真的是唯一的区别吗?我仍然不完全了解特征及其用途.
dec*_*eze 40
Traits允许您在类之间共享代码,而不必强迫您进入特定的类层次结构.假设您希望所有类都具有方便的实用方法foo($bar); 没有特质你有两个选择:
两种解决方案都不理想,每种解决方案都有不同的权衡.代码冗余显然是不可取的,并且继承自共同的祖先会使您的类层次结构设计不灵活.
Traits通过让您foo($bar)在每个类可以单独"导入"的特征中实现来解决此问题,同时仍允许您根据业务逻辑要求设计类层次结构,而不是语言必需品.
不完全是......让我们为此目的引用官方文档:
Trait类似于类,但仅用于以细粒度和一致的方式对功能进行分组.无法自行实例化Trait.它是对传统继承的补充,可以实现行为的横向组合; 也就是说,类成员的应用程序不需要继承.
因此Traits用于组合目的,以使类能够执行某些逻辑/行为.如果你继承自另一个/抽象类,它通常是出于多态的目的,你会得到一个独特的继承/类层次结构,这可能是也可能不是.
我认为这一切都取决于背景,架构以及你想要做什么.
| 归档时间: |
|
| 查看次数: |
8418 次 |
| 最近记录: |