我最近遇到Traits http://php.net/manual/en/language.oop5.traits.php在 PHP 中,我试图理解它们。在我的研究过程中,我偶然发现了这个 Stack Overflow 问题:特性与接口 https://stackoverflow.com/questions/9205083/traits-vs-interfaces。接受的答案提到以下内容:
接口定义了实现类必须的一组方法
实施。
当使用特征时,方法的实现也会随之而来——这在接口中不会发生。
到目前为止一切都很好,但这对我来说听起来就像接口和抽象类之间的区别。所以这给我提出了一个后续问题:
我知道我只能从一个抽象类进行扩展,另一方面可以使用任意数量的特征。但这真的是唯一的区别吗?我仍然不完全理解特质及其用途。
Traits 允许您在类之间共享代码而不强迫您进入特定的类层次结构。假设您希望所有类都具有方便的实用方法foo($bar)
;如果没有特质,你有两种选择:
- 在每个类中单独实现代码冗余
- 从共同(抽象)祖先类继承
这两种解决方案都不理想,各有不同的权衡。代码冗余显然是不可取的,并且从共同祖先继承会使您的类层次结构设计不灵活。
Traits 通过让您实现来解决这个问题foo($bar)
每个类都可以单独“导入”,同时仍然允许您根据业务逻辑需求而不是语言需求来设计类层次结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)