在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