2013-04-04 52 views
0

我只是創建一個簡單的獨立庫存更新程序,並將我的手轉向OOP,而不僅僅是基於函數。我創建了一個簡單的類,它需要我的數據庫連接,但想知道包含和使用數據庫連接的最佳做法。第一個exert是將使用數據庫的類。第二個是'dbconnector.php'的內容。使用外部數據庫類創建新類

class stockUpdater { 

    var $data = ''; 

    function __construct() { 
     include('dbconnector.php'); 
     print_r($mysqli); 

     //check and get file 
     $fp = fopen('stockfiles/stockfile.csv', 'r'); 
     if($fp){ 
      while(! feof($fp)) { 
       $prods[] = fgetcsv($fp); 
      } 
     } 

     if(empty($prods)){ 
      $this->logError(time(),'No data found in file'); 
     } 
    } 

    //error logging function 
    private function logError($time, $message){ 

    } 
} 

$updateStock = new stockUpdater(); 

我知道我在做什麼這裏工作,但不知道是否有這樣做比包括數據庫連接腳本在每類中只需要1時,這可能會創建多個數據庫連接的更好的方法。

$mysqli = new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); 

/* 
* This is the "official" OO way to do it, 
* BUT $connect_error was broken until PHP 5.2.9 and 5.3.0. 
*/ 
if ($mysqli->connect_error) { 
    die('Connect Error (' . $mysqli->connect_errno . ') ' 
      . $mysqli->connect_error); 
} 

/* 
* Use this instead of $connect_error if you need to ensure 
* compatibility with PHP versions prior to 5.2.9 and 5.3.0. 
*/ 
if (mysqli_connect_error()) { 
    die('Connect Error (' . mysqli_connect_errno() . ') ' 
      . mysqli_connect_error()); 
} 
+0

我想你應該叫dbconnector當你實例化類。類的想法是普遍的 - 所以每次你需要不同的連接時,你調用不同的dbconnector並實例化同一個類的新對象。 – 2013-04-04 11:04:13

+0

你能舉個例子嗎?不是100%確定我明白你的意思 – 2013-04-04 11:07:46

+0

最簡單的例子:'public function __construct($ conn){include(''。$ conn。''); ......; '$ conn ='dbconnector.php'; $ a = new stockUpdater($ conn);'...; ...'$ conn2 ='dbconn2.php'; $ b = new stockUpdater($ conn2);'...所以從stockUpdater()實例化對象作爲$ a將與dbconnector.php連接,但在$ b上實例化的同一類將與dbconn2.php連接 – 2013-04-04 11:08:26

回答

1

解決這個問題的最簡單方法是環繞$mysqli實例。

定義StockUpdater類(它的建議,以大寫類名的第一個字母)

class StockUpdater { 
    private $mysqli; 

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

    public function doStuff() { 
     // do stuff with $this->mysqli 
    } 
} 

而且使用它像

require_once('dbconnector.php'); 

$su = new StockUpdater($mysqli); 
$su->doStuff();