我正在创建一个数据库连接类作为超类中的抽象。我在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);
}
答案 0 :(得分:2)
通过查看你的代码,我会说你不能让它们变得静态,因为你在它们中引用了$ this。 $这对静态方法应该是什么意思? 静态方法只在类中存在一次,而不是引用特殊对象。
例如,请查看:When to use self over $this?
答案 1 :(得分:0)
你在抽象基类中所说的是子类应该实现这个函数签名:
abstract protected function connectToDatabase($hostname, $dbName, $userName, $password="");
您需要子类将connectToDatabase()实现为受保护的方法,然后在子类中将其实现为public。
除非你真的知道自己在做什么,否则不要使用抽象方法忘记基类,只需使用非静态方法创建一个类。保持简单。