1

我正在创建一个数据库连接类作为超类中的抽象。我在 php 中使用 PDO。我想让它抽象化,以便我可以为 mysql、oracle、postgre 等声明特定的数据库连接子类。

我在抽象超类中有一个连接方法,我也将其声明为抽象。我现在的问题是,我可以让这个连接方法在子类中也是静态的吗?我想知道这样做是否正确。

编辑

//SUPER CLASS
abstract protected function connectToDatabase($hostname, $dbName, $userName, $password="");


// SUB CLASS
public static function connectToDatabase($hostname, $dbName, $userName, $password=""){

        $this->setHostName($hostname);
        $this->setDbName($dbName);
        $this->setUserName($userName);
        $this->setPassword($password);
        $this->setDatabaseType(DATABASE_TYPE);
        $dsn = $this->getDatabaseType(DATABASE_TYPE) . ":" . parent::getHostConst() . "=" 
              . $this->getHostName() . ";" . parent::getDbNameConst() . "=" . $this->getDbName();
        $pdo = new PDO($dsn, $username, $passwd);
        $this->setPdoConnection($pdo);
}
4

2 回答 2

2

通过查看您的代码,我会说您不能将它们设为静态,因为您在其中引用了 $this 。$this 在静态方法中应该是什么意思?静态方法在类中只存在一次,并且不引用特殊对象。

例如看一下:何时使用 self 而不是 $this?

于 2012-12-19T21:44:51.300 回答
0

你在抽象基类中说的是子类应该实现这个函数签名:

abstract protected function connectToDatabase($hostname, $dbName, $userName, $password="");

您需要子类将 connectToDatabase() 实现为受保护的方法,但随后您在子类中将其实现为公共。

除非您真的知道自己在做什么,否则请忘记具有抽象方法的基类,而只需创建具有非静态方法的单个类。保持简单。

于 2012-12-19T22:40:21.850 回答