2010-12-19 59 views
1

我現在學習PHP OOP,我想獲得你的提示。我創建數據庫連接類,這是好嗎?開始使用PHP OOP

如何在另一個類中使用「數據庫」類?總是使用「擴展」?

感謝

<?php 
//Config 
$db_user = 'root'; 
$db_pass = ''; 
$db_host = 'localhost'; 
$db_name = 'test'; 

class Database 
{ 
    private $Database; 
    private static $instance; 

    public static function instance() 
    { 
     if (!self::$instance) 
      self::$instance = new Database(); 
     return self::$instance; 
    } 

    public function connect($host, $user, $password, $name) 
    { 
     $this->db_link = mysql_connect($host, $user, $password); 
     mysql_set_charset('utf8'); 
     mysql_select_db($name, $this->db_link); 
    } 

    public function query($query) 
    { 
     $sql = mysql_query($query); 
     $row = mysql_fetch_array($sql); 

     return $row; 
    } 
} 

class Book extends Database 
{ 
    public function getData2() 
    { 
     $sql = $this->query('SELECT * FROM users WHERE price = "7"'); 
     return $sql['name']; 
    } 
} 

$db = Database::instance(); 
$db->connect($db_host, $db_user, $db_pass, $db_name); 

$b = new Book(); 
$res = $b->getData2(); 
print_r($res); 

?> 

回答

-3

你不會使用這裏的理想除非擴展書是數據庫的一個子類。你會做這樣的事情:

class Book 
{ 
    var $db; 

    function __construct() { 
     $this->db = Database::instance(); 
    } 
} 

然後書類將使用的數據庫對象的實例,你可以隨時用$這個 - >訪問數據庫裏面書。

+0

評論你的代碼,這是錯誤的。您必須定義變量和方法的範圍(公共,私人,受保護)。 – Shoe 2010-12-19 22:21:41

+3

W00t?這從OOD(面向對象設計)的角度來看是可怕的。書不是數據庫,所以不應該使用繼承。組成也許可以使用,但它可能只是一個實體。 – 2010-12-19 22:21:45

+0

@Charlie Pigarelli PHP會將未指定的成員變量和方法視爲公共對象。 – 2010-12-19 22:34:15

0

你可以擴展數據庫類,但它不是我的建議。 您也可以在實際需要數據庫的函數中使用關鍵字global,讓函數從外部獲取數據庫實例;但仍有些人對全球關鍵詞感到緊張。 您可以傳遞數據庫類的實例作爲需要數據庫的類的構造函數的參數,這樣您就可以用簡單的鏈調用db方法:$ this-> db-> connect();

0

正如björn所說,一本書不是數據庫,不會推薦擴展。

一種方法是對書的對象初始化,通過參考DB-層/對象..

$myDb = new dbLayer($settings); 

$myBook = new book($myDb); 

$a = $myBook->getAllData($someParameter); 

in the constructor of book you save the reference to the dblayer... 

class book { 
    var $dbTier; 
    __constructor($db) { 
    $this->dbTier = $db; 
    ... 

問候,

//牛逼

0

你可以做像這樣,這應該是容易理解的

class User{ 
    private $db; 

    public function __construct($db){ 
    $this->db = $db; 

} }

構造函數參數中的$ db將是您的數據庫連接並且需要另一個文件。所有的任何你如何得到它,但不在課堂上。

你喜歡的用戶數據庫
require 'file from where you have your database'; 
$user = new User($db); 

隨時進行查詢,你剛纔提到它像下面

$this->db->query();