在我看來,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'函數暴露給使用數據庫的應用程序訪問對象。程序員不會意外地調用一個危險的函數,如果沒有被其他函數正確初始化可能會導致重大問題,程序員也不能像使用一系列靜態函數和全局變量一樣有意地抑制類錯誤或其他受到類保護的數據。
雖然一個好的應用程序可以在沒有任何對象的情況下進行設計,但一個好的程序員應該在適當的時候享受對象所提供的可用性,可擴展性和保護。
我會留下我最後的隱喻。對象就像工廠內的專用機器和工具。雖然工廠本身在其裝配線上有許多這些獨特的工具,但從簡單的彎曲制動器到數控機牀和自動化機器人,它們只是幫助更多衆多勞動者和管理者的團隊中的一小部分,我們的靜態功能,做建設一輛更好的汽車,卡車或自行車的工作。
什麼是「隨機函數」? – Svisstack 2010-11-01 12:08:57
** [函數.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
我認爲「Utilities」/「Helpers」類在大多數OO項目中都是標準的:P。 – Matt 2010-11-01 12:18:58