使用外部数据库类创建新类

时间:2013-04-04 11:01:16

标签: php mysql oop

我只是创建一个简单的独立股票更新程序,并将我的手转向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());
}

1 个答案:

答案 0 :(得分: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();