Tom*_*ger 5 php static constants self late-static-binding
在这个 StackOverflow 问题中,我了解到它self::
不是继承感知的static::
(在 PHP 中)。当涉及在类中定义一堆常量时,如果您想覆盖子类中的这些常量以更改默认的“行为”,则必须使用static::
父类中引用该常量的方法,从而尊重“覆盖”。
自从我提出这个原始问题以来的 2 年里,我已经开始static::
广泛使用,以至于我很少使用,self::
因为self::
这似乎限制了使用常量的类的可扩展性,而static::
没有这种限制。
即使我不目前打算常数被覆盖在一个子类,我最终使用static::
,以防万一-所以我没有做一堆的以后的搜索和替换,如果事实证明我将要扩展类并覆盖常量。
但是,在其他人的代码中,我很少看到static::
. 直到 2012 年,我什至不知道它的存在。那么,为什么不是理所当然地使用static::
代替的普遍做法self::
呢?
我的问题的话,就是:是否有任何明显的缺点,使用static::
了指的类的常量,而不是self::
?我是否因为在这里使用了严重的反模式而感到内疚?
实际上这仅取决于您需要的用途。如果您需要访问调用它的类的常量,请使用self
. 如果您需要后期静态绑定,请使用static
.
从性能的角度来看,self
两者static
相当。
另请注意,广泛使用静态组合来覆盖/继承并不是一个好主意。
为了直接回答你的问题,我总是更喜欢使用 来static
进行测试(尽管现在 PHPUnit 4 删除了对模拟静态方法的支持)。