2008-09-11 69 views
10

我開始編寫一個web應用程序,而不使用PHP的面向對象功能。PHP對象是否定向?

我真的不知道是否值得回去重寫我已完成的部分。面向對象的PHP值得重寫一個體面的工作應用程序的全部或部分?

回答

20

鑑於你有一個不完整的應用程序,我會說,將它改造成基於對象的應用程序可能會有所幫助。

需要考慮的一件事是最終應用程序的預期大小。低於一定的複雜度基於對象的學習經驗除外,可能是過度殺傷。

我開始避免像瘟疫這樣的對象,因爲我在大學課程中對他們的初步介紹很糟糕。我最近不得不在一個在php對象中實現的項目上工作。使所需的更改比其他項目更容易。從那以後,我經常在對象模型中工作,發現它非常方便快速創建和維護。

2

我不會說這是至關重要的,但如果你打算進一步瞭解應用程序,我會建議現在就做,而不是那麼重要的任務。我認爲一個寫得好的面向對象程序的可維護性遠遠超過了前面的成本。特別是當你考慮到你將能夠重構大部分的代碼。

2

學習面嚮對象的技術將非常有用,特別是在將來用其他語言進行編程時。

由於您剛剛啓動了應用程序,因此您可以重寫和改進已編寫的部分。這取決於你的截止日期。

4

典型答案:「這取決於」。

我傾向於將顯示頁面編寫爲從頭到尾,從< html到</html>腳本頁面。但是那個頁面上發生的事情是對象。有點像窮人的ASP。雖然你可以 OOP基地輸出,我alwasy認爲這太繁瑣的任務,因爲傾倒數據的瀏覽器繁瑣。

因此,業務規則和數據訪問是OOP。演示文稿是腳本。

如果你的業務規則是而不是面向對象,我會認真考慮在兩​​個條件下將它們寫成對象:(1)是「你有時間/精力/金錢去做嗎?和(2)是「你有一個好的PHP IDE會讓你的生活更輕鬆嗎?」如果它能夠工作,並且改變它意味着在Notepad ++中編寫,那麼我會稱之爲完成。 :-)

12

只是不同意共識......在大多數情況下,我會說不。無論如何,這不是關於商業代碼的學術演習。如果它工作,不要重新編寫它。如果你必須去修改/添加位,然後重構OO實踐(當你改變代碼時,有很多關於重構的帖子,而不僅僅是爲了它)。

在實踐中,如果你還沒有做過很多面向對象的事情,那麼你會想從小處着手並感受它。

一旦你掌握了基本知識,一本好的初學者指導Design Patterns(我喜歡Head First書)非常有用。大多數PHP書籍都會教你OOP相當差。他們教你關於繼承,但通常不會教你關於鬆散耦合和偏愛合成而不是繼承。設計模式書會讓你更好地瞭解這一點。

PHP仍然有一個不「做」OO權利的聲譽。我不認爲這是公平的,但它反映了人們如果沒有真正關注OOP就很容易上手。我會走出一條腿,並說PHP程序員的大多數人(對此很輕微 - 稱之爲51%)對OOP並不舒服。我認爲在PHP中做好OO是可能的,如果你已經習慣了這種語言,那麼這是擴展你的技能的好方法。

編輯:

只需添加一對免責聲明的......

  1. 我的評論大約 PHP程序員不是舒服OOP並不適用於目前的SO觀衆!
  2. 不是暗示你不舒服與OOP,這適用如果你如果做的不是
+1

實際上,我試圖想辦法來促進更好的PHP代碼,但它是這樣一個艱鉅的任務。 。 。 – 2011-11-04 00:19:06

0

我要說嘗試去OO只是因爲你有什麼可重複使用比程序容易得多right

我也會說,面向對象的程序化程度要高得多。當你的規模很小時,很容易擺脫臃腫的代碼OO。但是當你進入更大的項目時,你的程序必須更加有組織和思考。在一些更大的項目中,OO往往會迫使你更有組織,使事情變得更容易一些。

0

不,我認爲如果應用程序運行得像它應該沒有必要重寫它。 PHP並不是真正的OOP。他們努力嘗試,但有時我甚至認爲即使是PHP開發人員也不太瞭解面向對象的感覺。 如果你想學習OOP(這當然是個好主意),可以嘗試一個像Smalltalk這樣的真正的OOP語言來學習基本概念。 Java也很好2學習基本,雖然它不完全是面向對象的

1

有兩種可能性:要麼你的應用程序是一次性的,只需要立即工作,永遠不會被觸摸,改編,擴展或修改,或其他你的應用程序是你將繼續使用和使用很長時間的東西的開始。

如果是前者,不要破壞完全可用的代碼。你有更好的事情來處理你的時間。

如果是後者,你必須牢記一個關於PHP的重要事實,這就是:寫得不好的PHP是一個噩夢來維護。不如Perl寫得差 - 因爲是什麼? - 但足夠糟糕的是,遲早你會感覺到一個強烈的衝動,想要偷一個時間機器,回到你現在發現你自己維護的代碼的那一刻,然後用冰鎬刺入眼窩。

因此,如果您打算隨時間維護此代碼,請花時間做正確的事。這意味着:某種模板系統,HTML內嵌的PHP標籤,單獨的文件以實現單獨的功能,以及類的類類

你的眼窩會感謝你。

0

我想在此重申其他答案。這取決於應用程序的大小以及您希望瞭解OOP的程度。儘管使用PHP,我會小心學習OOP。

至於多少PHP 面向對象...... PHP4有一些面向對象的元素,PHP5更好,但它並沒有烘焙到語言中。 PHP可以兼顧雙方,我個人喜歡你可以選擇。

0

在我的腦海裏,我們phper可以thorouly扔掉對象(類實例)的概念,我們只需要陣列和模式類型:

初始模式支持的所有陣列的任何陣列功能,因爲它的方法:

<?php 
$array1->array_flip(this); 
?> 

使用->mode()驗證的最小數據集合,然後切換模式類:

<?php 
$array1->mode('class1', $success); 
?> 

任何模式類沒有->construct(),但有->validate()驗證最小數據集。

的模式仍然可以使用陣列功能作爲它的法陣,但使用其中的任何陣列後,將切換回基本陣列模式, ,我們需要使用->mode('class1', $success);切換模式回來。我們需要將數據(數組)和活動(類方法)分開。我們需要將數據(數組)和活動(類方法)分開。我們可以修改PHP引擎,擺脫OO(面向對象)的部分,並且支持Mode類,我們可以稱之爲MyPHP。

例如: $array_man1可以設置爲兩種模式:cls_normal_mancls_crazy_man

<?php 
$array_man1->mode('cls_normal_man')->normal_method1()->mode('cls_crazy_man')->crazy_method1(); 
?>