【发布时间】:2013-12-16 16:41:06
【问题描述】:
我正在尝试使用 MySQLi 类,但不想每次都写出连接详细信息。我一直在尝试做的是创建一个扩展类mysqli,称为database,它将返回一个连接处理程序,如果无法建立连接,最终会优雅地失败(我还没有这样做)。
但是,我遇到的问题是(如果这非常简单,我现在道歉)在实例化子类database 并将其传递给需要它的方法。
我走对路了吗?由于 MySQLi 可以实现 OOP,我认为编写一个全新的类只是为了使用它,而我可以在每个类中使用所需的方法,这有点违背了它的意义?
下面是我的database 类,它扩展了mysqli。
class database extends mysqli{
//set connection variables
private $host = "localhost";
private $username = "username";
private $password = "password";
private $db_name = "db_name"; //database name
public function connect(){
$mysqli = new mysqli($this->host, $this->username, $this->password, $this->db_name);
if ($mysqli->connect_errno){//check if any connection error was encountered
return false;
} else {
return $mysqli;
}
}
}
这是我的注册类,可能会准备语句、执行查询等。
class registration{
private $email;
private $sec_email;
private $password;
private $sec_pass;
private $code;
function __construct($code, $email, $sec_email, $password, $sec_pass){
//Sets all the vars above
}
public function check_vars(){//Check variables are set and valid.
$mysqli = new database;
if($mysqli){
$code_check = $this->check_code($this->code, $mysqli);
if($code_check == true){
//Code checks out
}
}
}
private function check_code($code, $mysqli){
if($stmt = $mysqli->prepare("SELECT `code` FROM `code_list` WHERE `code` = ? LIMIT 1")){
//return true
}
}
}
提前致谢,如果我忽略了一个简单的答案,我深表歉意。
UPDATE
自从阅读了@Your Common Sense 留下的答案后,我做了以下事情:
index.php
require_once('config.php');
$mysqli = new mysqli($db['host'], $db['user'], $db['pass'], $db['dbname']);
$display = new dispaly($mysqli);
//Display methods...
config.php
$db = array('host' => 'host', 'user' => 'user', 'pass' => 'pass', 'dbname' => 'dbname')
require_once('lib/other.classes.php');
//More classes
主要想补充的是,自从提供了这个答案后,我也开始对许多其他对象使用依赖注入,而不是每次需要它们时都实例化新对象。
感谢@Your Common Sense 和@Bill Karwin!
【问题讨论】: