这是单例模式,也称为单例类。它的目标是只允许一个singleton类型的对象。如果已经有一个我打电话给它,我希望它以某种方式出错。这不会发生在生产中,而是发展中。有没有更好的方法,然后只是说回声回声“错误:只有一个连接”;
class singleton
{
protected static $_db_pointer = NULL;
private function __construct()
{
$this->_db_pointer = mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_DATABASE);
}
public static function get_instance()
{
if(self::$_db_pointer == NULL)
{
return new self();
}
else
{
echo "Error:only one connection";
}
}
}
答案 0 :(得分:2)
例外情况通常会更好。
else
{
throw new Exception("Error:only one connection");
}
您还可以使用“LogicException”,“RuntimeException”和其他一些内容。
进一步阅读: http://www.php.net/manual/en/language.exceptions.php
使用singleton类的另一种方法是返回对象,而不是创建一个新实例(如果存在)。
答案 1 :(得分:0)
您尚未正确实施单例模式。如果你这样做了,你提到的错误条件就不存在了。
合并PHP documentation's singleton example和原始代码会产生:
class singleton
{
// Hold an instance of the class
private static $instance;
private static $db_pointer;
// A private constructor; prevents direct creation of object
private function __construct() {
$this->_db_pointer = mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_DATABASE);
}
// The singleton method
public static function get_instance()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
public function getDbPointer() {
return self::$db_pointer;
}
// Prevent users to clone the instance
public function __clone() {
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}