Php 在类中使用MySQLi,如何实现?
到目前为止,我通过Php 在类中使用MySQLi,如何实现?,php,database,oop,mysqli,Php,Database,Oop,Mysqli,到目前为止,我通过\uu构造函数中的一个参数传递$database-对象 但我不想在每节课上都通过。但是怎么做呢?我不是一个很聪明的OOP-er,但是我知道一些基础知识。。。 下面是我现在使用的代码:已更新 class connection { public static $connection; public function __construct() { $this->connection = new MySQLi('localhost', 'use
\uu构造函数中的一个参数传递$database
-对象
但我不想在每节课上都通过。但是怎么做呢?我不是一个很聪明的OOP-er,但是我知道一些基础知识。。。
下面是我现在使用的代码:已更新
class connection {
public static $connection;
public function __construct() {
$this->connection = new MySQLi('localhost', 'user', 'pass');
$this->connection->select_db('database');
}
public function getInstance() {
if(!isset(self::$connection)) {
self::$connection = new connection;
}
return self::$connection;
}
}
class something {
private $connection;
public $id;
function __construct($id) {
$this->connection = connection::getInstance();
$this->id = $id;
}
function verify() {
$statement = $this->connection->prepare('SELECT * FROM `tabel` WHERE `id` = ?');
$statement->bind_param('s', $this->id);
$statement->execute();
$statement->store_result();
if($statement->num_rows != 1) {
return false;
}
}
}
它不起作用:调用未定义的方法connection::prepare()
MySQLi::getInstance($optional\u instance\u name)
作为一个静态方法,检索您请求的任何数据库连接。MySQLi::getInstance($optional\u instance\u name)
作为一种静态方法,可以检索您请求的任何数据库连接。嗯,您需要以某种方式将数据库放在其中。要么你把它传进来,要么你的类需要自己获得连接。如果要让类自己获取连接,请将其包装在一个单例中,以便您可以执行类似于DBManager::getConnection()
的操作。要么你把它传进来,要么你的类需要自己获得连接。如果你想让类自己获得连接,把它包装在一个单例中,这样你就可以做类似于DBManager::getConnection()
,也许吧。Eahh,如果我把它放在构造函数中,它会说调用未定义的方法mysqli::getinstance()
,别忘了我不是OOP方面的专家……XD这在我的回答中有点含蓄,但您需要构建该方法。看看这里列出的单例模式:(您不想要一个真正的单例,而是一个可以返回或初始化您所请求的任何实例的注册表)除此之外,请阅读OOP。在你对概念有了很好的理解之前,你的代码将是垃圾。@Kenaniah:就因为你把代码称为垃圾:单例通常被认为不比全局变量好多少。如此之多以至于他们经常被认为是。。。你所描述的真的是一个。。。坚持依赖注入,这是更好的解决方案…Multiton。这就是我要找的词:-)@单例通常是垃圾。也就是说,当处理一个不太可能改变的持久性资源(很多应用程序只在一个数据库上运行)时,重新配置单实例/多实例通常比管理注入的依赖项更容易。因为它是一个DB连接,所以我采用了务实的方法。但是如果你的对象需要在多个数据库上运行,依赖注入就会成功。Eahh,如果我把它放在构造函数中,它会说调用未定义的方法mysqli::getinstance()
别忘了我不是OOP方面的专家…xDIt在我的回答中有点含蓄,但你需要构建那个方法。看看这里列出的单例模式:(您不想要一个真正的单例,而是一个可以返回或初始化您所请求的任何实例的注册表)除此之外,请阅读OOP。在你对概念有了很好的理解之前,你的代码将是垃圾。@Kenaniah:就因为你把代码称为垃圾:单例通常被认为不比全局变量好多少。如此之多以至于他们经常被认为是。。。你所描述的真的是一个。。。坚持依赖注入,这是更好的解决方案…Multiton。这就是我要找的词:-)@单例通常是垃圾。也就是说,当处理一个不太可能改变的持久性资源(很多应用程序只在一个数据库上运行)时,重新配置单实例/多实例通常比管理注入的依赖项更容易。因为它是一个DB连接,所以我采用了务实的方法。但是,如果您的对象需要在多个数据库上运行,则依赖项注入将获胜。