在一些問題上,類和直接用函數都能解決。而且我看某些php架構中,諸多類裡面的方法都不需要依賴這個類的執行個體 ,這些方法屬於工具性的方法,而且這些類裡面沒有任何屬性(變數),那這種情況下使用類還有什麼意義呢?如果不聲明static的話,還要先執行個體化才能調用,這比函數麻煩的多。那為什麼許多php類庫還要用一堆class,去實現幾個function就能實現的功能呢?
所以說,到底什麼情況下該用function,什麼情況下該用class?
回複內容:
在一些問題上,類和直接用函數都能解決。而且我看某些php架構中,諸多類裡面的方法都不需要依賴這個類的執行個體 ,這些方法屬於工具性的方法,而且這些類裡面沒有任何屬性(變數),那這種情況下使用類還有什麼意義呢?如果不聲明static的話,還要先執行個體化才能調用,這比函數麻煩的多。那為什麼許多php類庫還要用一堆class,去實現幾個function就能實現的功能呢?
所以說,到底什麼情況下該用function,什麼情況下該用class?
class的功能是對function的打包,當你需要打包多個function成一個模組(class)時,就用class而不是裸的function。
什麼時候用,見仁見智,因地制宜,不必非要追求完美的答案
我覺得題主可能對於物件導向的哲學有沒理解透徹的地方。
物件導向的class並不是把一堆function封裝成一個模組這麼簡單,他更多的是讓你把代碼世界中的各種東西抽象成一個事物(也就是對象),然後賦予他動作和標籤,也就是方法和屬性。
比如說使用者member他可以登陸,可以發帖,他名字叫昌維,那麼可以給他登陸和發帖方法,還有一個name屬性。
所以你這個問題我的回答是,如果是一些很小的功能,或者很通用的功能,並沒有和任何對象有耦合關係的情況下用function,否則就是用class。
這是一個很有意思的問題,正如你所說:『到底什麼情況下該用function,什麼情況下該用class?』
什麼情況?隨意舉3例:
一次性任務?
長期維護,商務邏輯複雜,變化頻繁?
長期維護,基礎支援,如開發架構?
通常一次性任務,用什麼無所謂了,完成任務即可。而需要長期維護的任務,就不僅僅是function或者class的問題了。這是一個工程,軟體工程。
企業級軟體系統與過去相比,更大也更複雜,變化也更頻繁,如何降低複雜度、應對變化,推動了軟體工程研究,也催生了表達能力更強的進階語言的演化。在設計上通過分解、抽象、階層等手段來降低複雜度、應對變化。
物件導向技術給出的一味藥方,包括抽象、封裝、模組化、階層、類型、並發、持久等原則。傳世藥方還有很多。也留下許多精典如《編程格調》、《代碼大全》、《敏捷式軟體開發 (Agile Software Development)-原則、模式與實踐》、《編寫可讀代碼的藝術》、《軟體設計重構》、《公司專屬應用程式架構模式》......
那麼答案是什麼呢?我也不清楚,或許你需要一個複雜的系統折磨一下,理解一些原則指導實踐,知行合一。
如果工具性的函數比較多的話,包在工具類裡作為靜態函數來調用會比較清晰,也方便對不同用途的工具函數進行分類。
歸類。
class Userfunction namefunction sexfunction age...