【发布时间】:2014-11-08 07:56:57
【问题描述】:
所以,我对 PHP 很老了,但大多数时候我使用的是过程式风格。我一直试图遵循 MVC 模式,即使我是在程序上做事。另外,我习惯了一些框架,比如 CakePHP 和 CodeIgniter。但是,我还没有使用 OOP 从头开始做任何事情。今天我这样做是为了大学工作,我有几个问题。
通常,在框架中,我们只需在任何控制器类上执行$this->database->query(),它就可以工作。在程序上,数据库的$link 进入全局范围,因此您不必担心。我一直在寻找一种方法来对我的代码中的每个类都做到这一点,但没有成功。我能得到的最好的结果是使用 Singleton 类来实例化数据库,但是,我需要在每个类中检索数据库链接。因此,例如,在 Users 类中,我必须在构造函数、Main 类以及其他所有类中获取它。
我的问题很简单。如何通过多个类使用数据库连接链接,而不必在所有类中实例化数据库。 而且,如果这样做是最好的更简单的方法,除了 Singleton 方法还有其他方法吗?
顺便说一下,我正在使用 Mysqli 库。
这是我一直在使用的课程。
class DB extends Mysqli {
protected static $instance;
private function __construct() {
global $config;
parent::__construct($config['db']['host'], $config['db']['user'], $config['db']['password'], $config['db']['database']);
if($this->connect_error)
die('Connect Error ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
public static function getInstance() {
if( !self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
}
这是一个类使用示例。
class Main {
protected $db;
public function __construct() {
$this->db = DB::getInstance(); // <-- having to do that in every class is the problem
}
protected function start() {
$this->db->query(something...); // works
}
}
【问题讨论】:
标签: php database class mysqli singleton