2011-10-18 33 views
0

我在管理一個相當古老的系統。這是一個代碼湯,我一直在重構代碼。PHP - 改進我的數據庫模型?

我在做這件事時注意到的一點是,90%的查詢都是CRUD。沒有加入,沒有別的。所有非常簡單的東西。

因此,我創建了一個涵蓋這些類型的查詢的模型類。然後,我爲每個表擴展模型類。

class Model extends MySQLi { 
    public function __construct() { 
     global $site; 
     $mysql = $site['mysql']; 
     parent::__construct($mysql['host'], $mysql['user'], $mysql['pass'], $mysql['db']); 
    } 

我不喜歡使用全局,但它確實允許我這樣做,而不必擔心連接細節。

<?php 
class Contact extends Model { 

    public $table = 'contact'; 

} 

$Contact = new Contact; 
$Contact->get(array('where'=>array('id >' => 4), 'limit' => array(0, 20)); 

我擔心的是,如果一個腳本需要3個表。我將使用3個模型,因此肯定意味着我將擁有3個獨立的數據庫連接?每班有一個?

這會是一個像我認爲會是什麼樣的問題?

是否有一種解決方法可以讓我繼續擴展MySQLi,並且可以將它傳遞給活動連接而不是連接細節,以便自己建立連接?

+0

看看使用Singleton模式的數據庫連接:http://php.net/manual/en/language.oop5.patterns.php – Raz

+1

看看爲什麼你不應該看使用數據庫連接的單例模式:http://www.google.nl/search?gcx=w&sourceid=chrome&ie=UTF-8&q=singleton+bad+practice –

回答

4

不要擴展Mysqli,只是將它包含在你的模型中。

class Model { 
    protected $db; 

    public function __construct($db) { 
     $this->db = $db; // the mysqli instance. 
    } 
    ..... 
} 
+0

+1依賴注入 –