我从事一个专有项目,该项目使用了相当多的一种或另一种形式的工厂。幸运的是,它们中的大多数不按名称实例化类,但是否new self()
用于new static()
实例化取决于开发人员。
我知道其中的区别,但我很好奇当后期静态绑定在技术上不是必需的时,是否有一些共识是“正确”的方式。例如,new static()
经常出现在几乎可以肯定永远不会被子类化的服务类中。这在抽象类中显然很重要,但我更喜欢new self()
在我不期望子类的地方使用。
解决技术差异的问题:
我好奇的是:
- 使用后期静态绑定是否会影响性能?
- 采用一种做法是否会对代码维护产生影响?例如。如果我使用 子类化一个类
new self()
,我必须重写/更改所有此类情况,但如果我的构造函数发生更改,这可能不是一件坏事。 - 是否有记录在案的最佳实践?我们使用 PSR-2,至少是有抱负的,但我不认为它涵盖了这一点。