php - 静态方法与静态实例

标签 php mysql oop mysqli

考虑下面的代码,我已经被 Lynda.com 认为 要创建这样的数据库类,我的问题是为什么不创建 完全是数据库的静态方法而不是存储 实例到静态属性?

<?php
class Database {

  private $conn;
  private static $init;

  public function __construct() {
     $this->conn = new mysqli('localhost','root','root','mydb');
  }

  public static function getInstance() {
     self::$init = new self();
     return self::$init;
  }

}

$db = Database::getInstance();

?>

最佳答案

如果你想使用单例,你应该保护 __construct()

class DB
{
  private static $instance;

  private function __construct($args)
  {
    // do some
  }

  public static function getInstance()
  {
    // get instance
  }
}

$query = 'SELECT etc...';
$stmt = DB::getInstance()->prepare($query);

我在数据库类中使用这种模式。但如果您有超过 1 个连接,则不应这样做!使用单例。

关于php - 静态方法与静态实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548938/

相关文章:

php - 显示来自多个自定义帖子类型的特定类别的帖子

php - 使用 php 发送 IMAP 命令

用于处理大型 XML 的 Java OO 设计

asp.net - 将通用模型的子类传递给 Razor View

php - 我可以在类数组上使用 array_filter() 吗?

php - MySql - 分割包含多个单词的记录

mysql - 如果我将 "UNIQUE"约束应用于列,数据库引擎是否会遍历整个表从而影响性能?

java - SQL 查询中的常量

php - 具有大型 WHERE IN() 子句的 MySQL 性能

python - Pandas DataFrame 对象继承还是对象使用?