簡介
“真正的天才具有正確評價不確定的,有風險的和矛盾的信息的能力。--邱吉爾”
使用許多編程語言時,你通常只能使用面向對象或面向過程二者之一的編程方式。而在php(做為現在的主流開發語言)中,你可以自由選擇或混用。目前絕大多數php(做為現在的主流開發語言)程序員使用面向過程的方式,因為解析WEB頁面本身就非常“過程化”(從一個標簽到另一個標簽)。在HTML中嵌入過程處理代碼是很直接自然的作法,所以php(做為現在的主流開發語言)程序員通常使用這種方式。
如果你是剛接觸php(做為現在的主流開發語言),用面向過程的風格來書寫代碼很可能是你唯一的選擇。但是如果你經常上php(做為現在的主流開發語言)論壇和新聞組的話,你應該會看到有關“對象”的文章。你也可能看到過如何書寫面向對象的php(做為現在的主流開發語言)代碼的教程。或者你也可能下載過一些現成的類庫,並嘗試著去實例化其中的對象和使用類方法--盡管你可能沒有真正理解這些類為什麼可以工作,或者為什麼需要使用面向對象的方法來實現功能。
應該使用“面向對象”的風格還是“面向過程”的風格?雙方各有支持者。像“對象是低效的”或“對象非常棒”這樣的議論也時有耳聞。本文不嘗試輕易判定兩種方法的哪種具有絕對的優勢,而是要找出每種方法的優缺點。
以下是面向過程風格的代碼示例:
<?php(做為現在的主流開發語言)
print "Hello, world.";
?>
以下是面向對象風格的代碼示例:
<?php(做為現在的主流開發語言)
class helloWorld {
function myPrint() {
print "Hello, world.";
}
}
$myHelloWorld = new helloWorld();
$myHelloWorld->myPrint();
?>
如果你想了解一些“面向對象”的基本知識,請使用Google搜索,網絡上有非常多精彩的文章。
誰像這樣寫代碼?
為了理解為什麼這個論題成為論壇上口水戰的導火線,我們看一些每個陣營的比較極端的例子。我們看看“過程狂熱”和“對象狂熱”。看看他們的觀點聽起來是不是有點熟悉。
過程狂熱
過程狂熱曾在上課時被計算機教師批評,因為這種方法沒有使用更加抽象的實現方式。而支持面向過程者的觀點“它可以工作!”並不能提高其編程水平和檔次。畢業後他們可能找到一個工作,寫驅動程序,文件系統或其它的偏向底層的編程,他們的注意力集中於速度和代碼的精煉。
“過程狂熱”極端的例子是抵制對象,抵制抽象化。他們總在想著如何讓程序運行起來更快,而不在乎別人是否能讀懂他們的代碼。他們常常把編程當成競賽而不是團隊活動。除了php(做為現在的主流開發語言)外,他們最喜愛的編程語言是C和匯編。在php(做為現在的主流開發語言)世界中他們可能會開發PECL模塊,貢獻出高效率的代碼。
對象狂熱
對象狂熱者熱衷於在任何時候使用面向對象的風格來書寫代碼。他們沒有真正考慮過用這種方式是否會影響程序的執行效率。有時候讓人覺得他們更享受抽象的設計概念而不是現實的代碼。他們通常很可能是項目管理者或文檔書寫者。
對象狂熱者指出,如果沒有抽象的設計方法我們仍然在使用0和1進行編程。他們喜歡用偽碼來描述問題。極端的例子是對象狂熱者即使知道有時候會犧牲效率仍然使用對象。 除了php(做為現在的主流開發語言),他們最喜歡的語言是Java和Smalltalk。在php(做為現在的主流開發語言)世界中,他們可能會開發PEAR模塊,貢獻文檔化非常好,易於維護的代碼。
不要偏激和諷刺
你知道為什麼論壇上總是充斥著各種偏見嗎?你的經驗閱歷,你對新事物的態度都可能是原因。作為程序員,我們需要時常注意這些偏見並以開放的心態去學習新事物。
你的編碼傾向?
考慮一下當你書寫php(做為現在的主流開發語言)代碼時有什麼偏好或傾向。通常這些偏好是比較隱晦的。有時候你可能在每個項目中有著同樣的偏好。我個人傾向於“優雅”,但我不想在此定義如何才是“優雅”的代碼,那應當出現在另一篇文章裡。但是,理論化的偏好不一定適合於實際項目—相反地,他們常常是一種偏見。