巩固评论中的变化,用我自己的。不是依赖常量,而是将变量传递给getInstance /构造函数,以便您可以以任何您想要的方式存储凭据,并将它们馈送到类中,而不必依赖于以某种方式存储的数据。增加了一点灵活性。
你也可以将它与代码交换,从配置文件读取它们,或者从服务定位器类型模式中获取数据。
Class MysqlConnection {
private static $instance = null;
private function __construct() {
self::$instance = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_DATABASE);
}
public static function getInstance() {
if (!isset(self::$instance)) {
$credentials = self::getCredentials();
self::$instance = new MysqlConnection();
}
return self::$instance;
}
}
function __clone() {
//Throw exception/custom exception type here.
}
}
编辑点评:这个想法是因为是阶级这里不是勾勒一个完全100%使用,但是代表我的立场和态度这一点。凭证位不是100%必需的,它只是我觉得让它更灵活一些,而不是将其编码为仅使用CONSTANTS等。这可能会从初始点分散注意力,这是单身人士看起来的样子。我对这种混乱表示歉意。
您也可以尝试永久连接。 – hjpotter92
如果(!isset(self :: $ intance)){'to'if(!isset(self :: $ instance)){''除非是拼写错误。 –
对于单例使用情况已经足够了,如果您需要强制实现独特性,您还可以使构造函数保持私有状态,并在'__clone()'中引发异常,但是,就是这样。如果你不需要执行它,你甚至可以使用一个带有'static'变量的正常函数,避免需要类变量/可能直接访问它。 – Wrikken