在this StackOverflow question中,我了解到self::
不是继承感知的地方static::
(在PHP中)。当在类中定义一堆常量时,如果要覆盖子类中的那些常量来更改默认的“行为”,则必须使用static::
以便引用父类的方法常数,尊重“超越”。
自从我提出原始问题以来的2年内,我已经开始广泛使用static::
,我很少使用self::
,因为self::
似乎限制了static::
的可扩展性使用常量的类,其中static::
没有此限制。
即使我不当前打算在子类中重写一个常量,我最终使用static::
,以防万一 - 所以我不必这样做稍后进行一堆搜索和替换,如果事实证明我将扩展该类并覆盖常量。
但是,在其他人的代码中,我很少看到static::
的任何使用。到了2012年,我甚至都不知道它存在。那么为什么在self::
当然使用static::
并不是一般做法呢?
我的问题是:使用self::
来引用类常量,而不是{{1}},是否有明显的缺点?我是否在这里使用严格的反模式?
答案 0 :(得分:0)
实际上它仅取决于您需要的用途。如果需要访问要调用它的类的常量,请使用self
。如果您需要延迟静态绑定,请使用static
。
从表演的角度来看,self
和static
非常相同。
另请注意,广泛使用静态组合来覆盖/继承并不是一个好主意。
为了直接回答你的问题,我总是更喜欢使用static
进行测试(现在PHPUnit 4删除了对模拟静态方法的支持)。