2010-07-12 64 views
9

我正在開發一個使用普通PHP的Web系統。這是我第一次使用PHP,因此代碼不清晰,也不乾淨。它將一些HTML代碼與PHP混合在一起。 我會說我已經完成了一半的代碼。PHP vs OO PHP - 使用哪一個?

面向對象PHP的真正優勢是什麼? 該網站是關於書籍和書籍作者,使用MySQL和Apache。所以這不是一個非常複雜的網站。

+3

這真的更多的是你的代碼正在組織之間沒有區別。你想組織。通過無序代碼篩選令人頭疼的問題是你不想處理的巨大時間問題。OO增加了代碼的壽命和可重用性。製作一本書課,將屬性視爲變量,並享受必須處理一個整合對象的好處,該整合對象包含您需要的所有數據(與一堆斷開連接的數組或其他方式保持跟蹤的方式相比)的書)。這個網站是你的朋友:http://php.net/manual/en/book.classobj.php – abelito 2010-07-12 22:35:32

+0

我刪除了'比較'和'語言比較'標籤,因爲你並不真正要求比較PHP和其他語言:你在問PHP和是否使用對象系統。 – 2010-07-12 22:46:37

回答

16

真正的優勢改變某物:你的代碼組織得更好,更易於維護,更加模塊化(因此更容易重用),並且可能不太脆弱(因爲封裝了狀態和實現,並希望有更好的安全性)。 (我這個憤世嫉俗的人也說,如果你學習面向對象的PHP,你需要邁出第一步離開PHP ghetto。呵呵。爲我工作!)

PHPers已經有很多問題轉移到OO上堆棧溢出:

更何況是t這裏有數以萬計的PHP面向對象教程。我的看法:基本上,是的,如果您正在編寫PHP,那麼您應該可以編寫面向對象的PHP,用於超出最瑣碎應用程序的任何內容。有很多類似於PHP的Rails框架可以讓你的生活更輕鬆,並且可以幫助你成爲更好的程序員。

+0

+1:我同意你的看法!我只會補充一點,PHP確實將對象的狀態保持爲一個頁面,因此您可能需要將數據保存在$ _SESSION數組中。 – Alerty 2010-07-13 00:26:00

2

面向對象的PHP與您在PHP代碼中混合使用的HTML代碼的程序風格沒有區別。所以如果你唯一擔心的是混合,你應該尋找其他方法來清理你的代碼。例如,您可以使用佔位符爲您的動態內容創建html模板文件,並使用file_get_contents和str_replace在運行時注入動態內容。

+0

但是,使用非OO,與HTML混合的PHP代碼的數量將顯着增加。 – thetaiko 2010-07-12 22:40:41

+1

@thetaiko:不一定。用一個例子證明我錯了,我會通過重寫程序版本來回答你的挑戰。 – 2010-07-12 22:52:35

+1

無論您使用的是OOP還是程序PHP,如果您將HTML(演示文稿)與業務邏輯混合在一起,那麼您將陷入一個巨大的混亂局面。任何Web開發人員都可以告訴你。更多地將表示方用作模板,就像JSP強制執行它一樣。 – 2010-07-13 00:50:24

-5

如果你真的想使用oo編程轉到Ruby。

OO PHP對我來說是假的。如果你已經在結構化的php中完成了一半的代碼,不要改變主意。

只記得,使代碼更乾淨,有很多意見,所以你可以很容易地在面向對象的未來

+6

有人應該告訴Facebook。和Zend。和梨。並且是SPL的維護者。 無論您對個人感受如何,都有數以百萬計的面向質量對象的PHP。 – 2010-07-12 22:43:11

+3

我不說在oo php中沒有好的工具。我只是說PHP並不是真正的OO編程語言。 – 2010-07-12 22:48:43

+0

@Dobiatowski那麼是什麼?現在是OOP。當然,這不是我最喜歡的OOP實現,但它工作得很好。 – 2010-07-12 23:00:52

0

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

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

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

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

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

任何模式類沒有「 - >構造()」中,但具有「 - > validate()」來驗證最小數據集。

在一個模式下的數組仍然可以使用數組函數作爲它的方法,但是在使用它們中的任何一個之後,數組將被切換回基本數組模式 並且我們需要使用「 - > mode('class1' $成功);」切換模式。

這裏的激進思想是以數據爲中心的編程;我們需要分離數據(數組)和活動(類方法)。

我們可以修改PHP引擎,擺脫部分OO(面向對象),並支持Mode類。我們可以稱之爲MyPHP。

例如: $ array_man1可以設置爲兩種模式:cls_normal_man和cls_crazy_man:

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