我最近遇到了Traits在 PHP 中,我试图理解它们。在我的研究中,我偶然发现了这个 Stack Overflow 问题:Traits vs. Interfaces .接受的答案提到以下内容:
An interface defines a set of methods that the implementing class must implement.
When a trait is use'd the implementations of the methods come along too--which doesn't happen in an Interface.
到目前为止一切都很好,但这听起来就像接口(interface)和抽象类之间的区别对我来说。所以这对我提出了一个后续问题:
- PHP 中的 Trait 和 Abstract Class 有什么区别?
我知道我只能从一个抽象类扩展,另一方面可以使用任意数量的特征。但这真的是唯一的区别吗?我仍然不完全了解特征及其用途。
最佳答案
Traits 允许您在类之间共享代码而不会强制您进入特定的类层次结构。假设您希望所有类都具有方便的实用方法 foo($bar)
;没有特质你有两种选择:
- 在每个类中使用代码冗余单独实现它
- 从通用(抽象)祖先类继承
两种解决方案都不理想,各有不同的权衡取舍。代码冗余显然是不可取的,从一个共同的祖先继承会使你的类层次结构设计不灵活。
Traits 通过让您在每个类可以单独“导入”的 trait 中实现 foo($bar)
来解决这个问题,同时仍然允许您根据业务逻辑要求设计类层次结构,不是语言必需品。
关于php - PHP 中 Trait 和抽象类的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39466521/