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连接,所以我采用了务实的方法。但是,如果您的对象需要在多个数据库上运行,则依赖项注入将获胜。