【发布时间】:2012-11-12 23:46:32
【问题描述】:
考虑下面的代码,我已经被 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();
?>
【问题讨论】:
-
反正两者都不好,因为它们会创建全局状态和隐式依赖,所以不要这样做。
-
该代码在
getInstance上缺少static说明符。这称为singleton pattern。 -
你确定这是你老师说的吗?我闻到缺少重要的细节。
-
您应该首先问:“为什么不直接创建
Mysqli数据库类的对象实例并传递它呢?” 构造函数中的 new 只是为了分配它以后静态访问的变量?没有多大意义。 -
除非你知道你需要它,否则不要使用
?>(删除它)。