2010-11-01 171 views
10

上課很有用,但是當我在寫課程的時候,我總是把它想成我的劇本上的一塊沉重的搖滾。我覺得班級應該很少使用。但與此同時,我們都對OOP範式心懷疑慮。我們什麼時候應該上課,什麼時候不應該上課

腳本從來沒有免費的功能?我是否應該使用千類來使腳本更加乾淨?那麼表演呢? class::method()是否需要更多的時間才能獲得簡單的function()? OOP的真正含義是什麼?我有點困惑。

因爲我發現OOP,我看不到隨機函數。我很癡迷。我看不到沒有父類的函數。我寧願用一種方法創建一個類,然後單獨看到這個函數。這樣對嗎?那裏有純粹的OOP CMSes的例子嗎?

+0

什麼是「隨機函數」? – Svisstack 2010-11-01 12:08:57

+0

** [函數.php vs OOP]的可能重複(http://stackoverflow.com/questions/2392795/functions-php-vs-oop)和[什麼是類的點](http://stackoverflow.com/questions/1993638/classes-whats-the-point)** - 總結:你要麼使用OOP要麼你不要。 – Gordon 2010-11-01 12:12:27

+1

我認爲「Utilities」/「Helpers」類在大多數OO項目中都是標準的:P。 – Matt 2010-11-01 12:18:58

回答

6

在我看來,PHP中程序員最重要的事情,除了他的經驗之外,他的工具包。也就是說,自古以來他就已經寫出了自己的代碼。

對於我來說,在這種情況下,OOP的優勢非常明顯。擁有一個你知道的類將總是通過簡單的方法預處理你自己和團隊成員的要求,然後通過調用大量的靜態函數。雖然你可以爭論一個包含satic功能的圖書館服務於同樣的目的,但在我看來,課程更容易閱讀和理解。舉例來說,在我的自定義會話類的程序員可以看看我的代碼,看看,

$my_session = new session(); 
$my_session->start(); 

if (($session_errno = $my_session->error()) !== FALSE) 
{ 
    //DO SOMETHING BECAUSE OF A SESSION ERROR 
} 

和容易理解,在這個應用會話通過我們的自定義會話類處理,並且應該返回某種類型的成功/失敗的沒有檢查過圖書館/班級。同時,呼叫像這樣,

session_start(); 

if (session_error()) 
{ 
    //DO SOMETHING BECAUSE OF A SESSION ERROR 
} 

不說清楚,session_start()不是默認的PHP會話處理程序,但它會調用哪個被列入全球包括一些大型列表session_set_save_handler()定義的函數這可能不容易在大型應用程序中找到。它也不那麼清楚,session_error()是一個返回由自定義會話處理程序設置的錯誤的函數,它可以主動在已經生成的會話中查找會話問題,並且完全獨立於PHP的默認會話。

這不是一個很好的例子,但我認爲它是一個很好的例子。我沒有詳細討論保護整個應用程序的數據,繼承以及使OOP有用的所有其他內容。

但很快,想象一個訪問應用程序的MYSQL數據庫的類。花費大量的時間來設計類以使用準備好的語句,記錄錯誤並根據需要爲程序員提供適當的邏輯。通過簡單地調用該類的公共「數據訪問」函數,而不必擔心致命錯誤,錯誤邏輯或危險SQL(注入等),團隊可以更少擔心數據庫訪問問題。

這一切都可以用靜態函數完成,就像你所建議的那樣,但是靜態庫中的每個函數都作爲一個整體暴露給應用程序,而只有public和'SAFE'函數暴露給使用數據庫的應用程序訪問對象。程序員不會意外地調用一個危險的函數,如果沒有被其他函數正確初始化可能會導致重大問題,程序員也不能像使用一系列靜態函數和全局變量一樣有意地抑制類錯誤或其他受到類保護的數據。

雖然一個好的應用程序可以在沒有任何對象的情況下進行設計,但一個好的程序員應該在適當的時候享受對象所提供的可用性,可擴展性和保護。

我會留下我最後的隱喻。對象就像工廠內的專用機器和工具。雖然工廠本身在其裝配線上有許多這些獨特的工具,但從簡單的彎曲制動器到數控機牀和自動化機器人,它們只是幫助更多衆多勞動者和管理者的團隊中的一小部分,我們的靜態功能,做建設一輛更好的汽車,卡車或自行車的工作。

+0

很高興聽到它。我的主要觀點是將對象作爲工具的概念,而不是所有現代編程都結束。 – DrPerdix 2010-11-01 13:43:20

1

我認爲你有一些不好的願景OOP編程,因爲你永遠不會做它。 雷神之錘3使用純Ç沒有任何階級和OOP所著,那麼這是一個證明,你可以做好事,而不使用OOP

但是,如果你想你可以使用它。 繼承類在實踐中具有小功能的業務邏輯編程,在框架編程中要好得多。

如果你決定編程與OOP然後寫小物件的小功能,誰做的小東西,不是大非可讀課長不直觀的功能,那麼你會在你的代碼保持乾淨。

1

看一看這樣的:

類是比變量和函數 影響這些變量 容器更容易一點,但他們 可以建立小 成分是非常有用的 - 幾乎miniture程序。 區別在於你不需要 來向它們展示它們,而 它們可以很容易地插入到大多數腳本 - 只需一個要求或包含頂部的 聲明。類 描述了一個'對象'。一個對象是一個 較小對象的集合,只是像一個類中的 。

Reference

0

如果你認爲你的對象是大石頭的,這可能是一件好事。 由於php性質不是很好(除了一些默認的擴展名),有足夠的程序功能 ,大約6000,不是嗎?

我鼓勵你繼續OOP。儘管如此,數百個課程似乎過分了。 對於初學者來說,將所有需要的東西放在一個對象中,並在適當的時候分割成子類。

0

對此沒有簡單的答案。

雖然一般情況下你應該堅持使用函數或面向對象的方法,與Java相比,關於PHP的好處之一就是它允許函數作爲一流的實體。

要記住的最重要的事情是,你用一種語言和風格編寫程序,使它們可以被人類讀取!計算機可以解析它們的事實非常巧合。

當然,調用靜態方法和函數的開銷不應該是一個考慮因素 - 而且你肯定會犯過早的優化。如果你擔心這個問題,你爲什麼不爲自己量身定做?你會發現雖然速度較慢,但​​差別非常小 - 在編寫代碼時不應超越主要目標(即它應該工作,應該儘可能清楚它是如何工作的,它應該沒有任何一方效果 - )。

+0

是否有純OOP腳本的例子?我想看一些。 – Shoe 2010-11-01 12:53:13

+0

不,因爲PHP不是純粹的** OO語言(也不是Java)。 (對於不同意的Java程序員,請提供關於原語和執行入口點是純粹的OO的解釋)。然而,在這個限制之下,它可能會編寫一些非常類型的應用程序 - 例如看看由horde項目分發的應用程序。 – symcbean 2010-11-01 13:26:46

5

不要使用OOP只是將一組看起來相關的函數組合在一起。

是否使用OOP來邏輯表示有狀態和無狀態的「事物」,這些事物可以被操縱,具有屬性或以各種方式使用。

請不要使用OOP只是因爲有人在這裏說你應該。

請使用OOP,因爲您在data encapsulation中看到了好處。

如果您認爲這會讓老闆高興,請勿使用OOP

請使用OOP,因爲您知道塔科馬是豐田是PassengerVehicle是車輛。

不要使用OOP,直到你至少查看了四人幫的設計模式 - 好處變得更加清晰。

請使用OOP,因爲您想爲使用此類的人員開發易於使用的界面。

相關問題