因為一些架構的設計經常會看到
DB::get('mall')->where('aaa');
為什麼不能這麼做
DB::get('mall')::where('aaa');
還有一些問題就是通過工廠或者靜態容器生產的對象一般都是費靜態。
比如一個日誌的類,我見過靜態也見過非靜態設計。有點選擇不定
不要跟我講什麼工具類型的最好是靜態,不用new之類的廢話。
回複內容:
因為一些架構的設計經常會看到
DB::get('mall')->where('aaa');
為什麼不能這麼做
DB::get('mall')::where('aaa');
還有一些問題就是通過工廠或者靜態容器生產的對象一般都是費靜態。
比如一個日誌的類,我見過靜態也見過非靜態設計。有點選擇不定
不要跟我講什麼工具類型的最好是靜態,不用new之類的廢話。
首先你要理解一下靜態和非靜態區別。
靜態類,不需要執行個體化就可以使用。這樣的話會有一點點效能提升。
靜態屬性,是所有執行個體都共用的,不管多少執行個體,靜態屬性只有一個。
當然非靜態類如果按照單例的方式來使用,事實上區別並不大。
那如何選擇靜態和非靜態呢?根據每個人對物件導向的理解程度,使用方法都不一樣。
比如日誌。如果一個系統僅存在一個日誌對象,那麼使用靜態類無疑是最好的,不管是調用方法、效能、資料存放區都比較方便。這時候這個日誌對象,你可以把它當成實體物件也可以當成抽象對象來用。
但是如果把日誌細化成使用者行為日誌、資料庫動作記錄、伺服器狀態日誌等等,這時候再把日誌已經是一個抽象的對象了,它需要有實體才能更好的使用。這時候使用非靜態,分別 new 出來會更好一點。因為他們雖然都同屬日誌對象,但是他們卻擁有不同的資料、方法。功能。
所以,我個人理解就是,如果一個類是一個完整的功能模組,不依賴於其他模組,也不需要進行擴充就能完成這個模組的功能,那麼寫成靜態是最好的。
如果一個類僅僅是一個抽象對象,也依賴於其他模組,或者需要進行擴充,或者需要進行繼承等等,那麼還是使用非靜態比較好