6

这个 StackOverflow 问题中,我了解到(在 PHP 中)self::不支持继承。static::在类中定义一堆常量时,如果您想在子类中覆盖这些常量以更改默认“行为”,则有必要使用static::以便父类上引用常量的方法尊重“覆盖”。

自从我提出那个原始问题以来的 2 年里,我已经开始static::广泛使用,以至于我很少使用,self::因为self::这似乎会限制使用常量的类的可扩展性,而static::没有这个限制。

即使我目前不打算在子类中覆盖一个常量,我最终也会使用static::,以防万一 - 所以我以后不必做一堆搜索和替换,如果结果证明我将要扩展类并覆盖常量。

但是,在其他人的代码中,我很少看到static::. 直到 2012 年,我什至都不知道它的存在。那么,为什么在理所当然地使用static::代替不是一种普遍的做法呢?self::

那么,我的问题static::self::? 我在这里使用粗暴的反模式是否有罪?

4

1 回答 1

1

实际上,这仅取决于您需要的用途。如果您需要访问调用它的类的常量,请使用self. 如果您需要后期静态绑定,请使用static.

从性能上看,selfstatic相当。

另请注意,广泛使用静态组合来覆盖/继承并不是一个好主意。

为了直接回答您的问题,我总是更喜欢使用static用于测试目的(尽管现在 PHPUnit 4 删除了对模拟静态方法的支持)。

于 2014-11-05T15:10:05.450 回答