如何为我的单例类抛出错误?

时间:2011-06-02 21:12:40

标签: php error-handling

这是单例模式,也称为单例类。它的目标是只允许一个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";
      }
    }
  }

2 个答案:

答案 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);
    }

}