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