static :: vs. self :: - 有什么缺点吗?

时间:2014-11-05 15:02:31

标签: php static constants self late-static-binding

this StackOverflow question中,我了解到self::不是继承感知的地方static::(在PHP中)。当在类中定义一堆常量时,如果要覆盖子类中的那些常量来更改默认的“行为”,则必须使用static::以便引用父类的方法常数,尊重“超越”。

自从我提出原始问题以来的2年内,我已经开始广泛使用static::,我很少使用self::,因为self::似乎限制了static::的可扩展性使用常量的类,其中static::没有此限制。

即使我不当前打算在子类中重写一个常量,我最终使用static::,以防万一 - 所以我不必这样做稍后进行一堆搜索和替换,如果事实证明我将扩展该类并覆盖常量。

但是,在其他人的代码中,我很少看到static::的任何使用。到了2012年,我甚至都不知道它存在。那么为什么在self::当然使用static::并不是一般做法呢?

我的问题是:使用self::来引用类常量,而不是{{1}},是否有明显的缺点?我是否在这里使用严格的反模式?

1 个答案:

答案 0 :(得分:0)

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

从表演的角度来看,selfstatic非常相同。

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

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