2013-04-04 59 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();