【问题标题】:Use MySQLi in classes, how to implement?在类中使用 MySQLi,如何实现?
【发布时间】:2011-02-24 18:31:56
【问题描述】:

到目前为止,我通过 __constructor 中的参数传递了 $database-object 但我想摆脱它在每节课上都通过。但是怎么做呢?我不是一个非常聪明的 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;
        }
    }
}

不起作用:Call to undefined method connection::prepare()

【问题讨论】:

  • 嗯,您需要以某种方式获取数据库。要么你把它传入,要么你的类需要自己获取连接。如果您要让类自己获取连接,请将其包装在一个单例中,以便您可以执行类似DBManager::getConnection() 之类的操作。

标签: php database oop mysqli


【解决方案1】:

MySQLi::getInstance($optional_instance_name) 作为一种静态方法,用于检索您要求的任何数据库连接。

【讨论】:

  • 呃,如果我把它放在构造函数中,它会说 Call to undefined method mysqli::getinstance() 别忘了我不是 OOP 方面的专家...xD
  • 我的回答有点含蓄,但您需要构建该方法。看看这里列出的单例模式:php.net/manual/en/language.oop5.patterns.php(您不想要一个真正的单例,而是一个返回或初始化您请求的任何实例的注册表)
  • 除此之外,请阅读 OOP。在您很好地掌握概念之前,您的代码将是垃圾。
  • @Kenaniah:仅仅因为您称该代码为垃圾:通常认为单例并不比全局变量好。以至于它们通常被认为是Anti-Pattern...而您所描述的实际上是Multiton...坚持依赖注入,这是更好的解决方案...
  • 多吨。这就是我要找的词:-)。 @ircmaxell,单身人士通常是垃圾。也就是说,当处理一个不太可能改变的持久性资源时(很多应用程序只在一个数据库上运行),重新配置你的单例/多例通常比管理注入的依赖项更容易。由于它是数据库连接,因此我采用务实的方法。但是如果你的对象需要在多个数据库上操作,依赖注入就赢了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多