寫一個PHP應用程序,還有好幾類,只有具有靜態方法(無需實例方法)。一個例子是NumericValidator
,其中有像checkInteger($toCheck)
方法進行檢查,確保參數傳遞給它的類型是int,和checkGreaterThan($lOperand, $rOperand)
,這確保了左操作數大於右操作數越大,等純靜態類VS辛格爾頓
我知道我可以只是扔每種方法到PHP文件,而不把它們一個類裏面,但我想萬一API發展到需要實例NumericValidator
在這裏採取的OOP方法。
但說實在的問題:怎麼是100%的靜態方法比有一個類實現一個Singleton設計模式,在整個代碼庫中使用的每個引用調用相同的實例有什麼不同的一類?
例如,這裏是我的代碼看起來像現在:
public function doSomething($p_iNum)
{
if(!NumericValidator::checkInteger($p_iNum))
// throw IllegalArgumentException
// ...
}
但我可以把所有的NumericValidator
的靜態方法到非靜態實例方法,迫使程序員實例化,然後執行一個Singleton設計模式,所以你永遠只能參考它的1個實例:
public function doSomething($p_iNum)
{
NumericValidator $nv = NumericValidator::getInstance();
if(!nv->checkInteger($p_iNum))
// throw IllegalArgumentException
// ...
}
最後,我的問題:這是在保持機智更好,更h最佳實踐?有沒有性能方面的考慮?這兩種方法如何影響諸如併發性或來自多個用戶的請求?
你爲什麼要爲is_int編寫一個包裝對象成員函數? – markus 2011-04-15 20:47:21
我使用NumericValidator作爲*示例*。實際上,無論我的*示例*是否具有邏輯意義,與我所問的問題無關,這與100%純靜態類與單例之間的性能差異有關。 – user709006 2011-04-15 20:51:03
[靜態認爲有害](http://kore-nordmann.de/blog/0103_static_considered_harmful.html) – Gordon 2011-04-15 22:08:20