在this StackOverflow question我了解到self::
不是遗传感知,其中static::
(在PHP中)。当涉及到在类中定义一堆常量时,如果要覆盖子类中的那些常量以更改默认“行为”,则有必要使用static::
,以便引用常量,荣誉的父类方法“覆盖”。static :: vs. self :: - 有没有什么缺点?
在2岁,因为我问原来的问题,我一直在使用static::
广泛,给我很少用self::
因为self::
点似乎限制使用常量类的可扩展性,其中static::
没有启动这个限制。
即使我不目前打算恒定在子类中重写,我最终使用static::
,以防万一 - 所以我没有做一堆的搜索和替换后来,如果事实证明我想要扩展这个类并覆盖这个常量。
但是,在别人的代码中,我很少看到任何使用static::
。直到2012年,我甚至不知道它存在。当然,为什么在self::
的地方使用static::
当然不是一般惯例?
我的问题的话,就是:是否有任何明显缺点使用static::
为指的类的常量,而不是self::
?我是否在这里使用粗糙的反模式?
感谢您的回答!为什么“广泛使用静态”不是一个好主意?请解释。另外,为什么静态更适合测试目的? – 2014-11-05 18:28:13
有很多关于此主题的有用信息:http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/ – dynamic 2014-11-05 18:57:40