2013-06-22 28 views
3

在php中實現mysql時,是否在使用面向對象方法而不是使用過程方法時存在顯着差異?關於mysqli_query,(http://www.php.net/manual/en/mysqli.query.php)的php網站上,它提供了兩個示例,我只想知道是否存在任何顯着的性能差異,或只是知道何時使用它們中的每一個。在php程序和麪向對象實現的差異?

+0

我是一個n00b我自己,但從我的理解,程序方法更容易閱讀。除此之外,沒有什麼。 (糾正我,如果我錯了) – dayuloli

+2

表現:沒有。 Codeflow:是的。選擇一個適合你的項目。較新的OO代碼可能有利於更多的面向對象方法,然後是現有的/較舊的程序代碼。在面向對象方法中擴展和更好地控制對象的能力在大型項目中是很有價值的。 – Wrikken

+0

事情是,我正在爲我正在實習的公司從頭開始寫一個網站。繼續使用OO方法會更好嗎?它是否更具前瞻性?對不起,如果我不清楚。 – JPeroutek

回答

3

回答哪一個是更好是「它要看」。與其他任何東西一樣,有各種不同的方法,您還應該記住,使用對象的代碼不一定是面向對象的,但仍然可以通過程序來編寫。同樣,不使用對象的代碼仍然可以模塊化。

雖然我會選擇每次使用mysqli類。性能沒有顯着差異。您可能不會意識到使用諸如簡化多態的數據庫類的一些優點,所以我唯一使用該類的參數是我更喜歡語法。但是,我並不直接使用mysqli,而是建議您擴展或撰寫它。你只能在課堂上做到這一點。

class DB extends mysqli { 
    public function __construct() { 
     parent::__construct($_SERVER['DB_HOST'], 
      $_SERVER['DB_USER'], $_SERVER['DB_PASS']); 
    } 
} 

這是一個很淺的例子。

我說的是上面的多態性的一個例子是這樣的:

class User implements DAO { 
    private $db; 
    public function __construct(DB $db) { 
     $this->db = $db; 
    } 
} 

//Testing code is simplified compared to using it in production 
class TestDB extends DB {} 
new User(new TestDB); 
new User(new DB); 

順便說我斷然喜歡PDO超過mysqli

+0

感謝您提供詳細的答案,並提供了一個很好的解釋和示例。我只是打勾了,但我會等一會兒,然後纔會有更好的答案。 – JPeroutek

-4

不,沒有什麼區別。

但是你忽略了更重要的事情:在應用程序代碼中不必使用原始的mysqi API函數,無論是OOP還是程序。

PHP用戶不知道有一件事:API調用並不打算按原樣使用。他們必須被包裝在某種圖書館中。沒有它mysqli只是在後面痛苦,它需要比舊的好的mysql分機多兩倍的代碼。

所以,如果您使用這樣的圖層,它確實很重要,但如果它是使用內部的程序或OOP編寫的,則無關緊要。

然而,這個庫應該建立在類的形式。沒有別的辦法。

+0

所以你在說應該創建一個所有MySQLi函數都被包裝好的類?或者你在談論更多的模型課程?我真的不知道MySQLi如何比原始的MySQL擴展需要兩倍的代碼量...... – Havsmonstret

+0

我正在談論第一個。但我不得不承認,要理解DRY原則,必須具備一定的經驗和一些項目。 –

0

由於你是一名實習生,因此找出將來要維護代碼的人是明智的。

  1. 沒有公司。與OOP一起去,如果你對此感到滿意,因爲OOP是目前的做法。
  2. In House。有目前的做法,希望OOP
+0

謝謝你的回答。我認爲我們正在內部進行這項工作,因爲這就是我製作網站的原因,他們僱用的最後一個組每隔兩週就會更換一次cms系統,所以我們正在尋求長期穩定性。 – JPeroutek