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は静的メソッドで何を意味するのでしょうか?静的メソッドはクラスに1回だけ存在し、特別なオブジェクトを参照しません。

たとえば、次を見てください。$ thisよりもselfを使用する場合は?

于 2012-12-19T21:44:51.300 に答える
0

抽象基本クラスで言っていることは、サブクラスはこの関数シグネチャを実装する必要があるということです。

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

保護されたメソッドとしてconnectToDatabase()を実装するには、サブクラスが必要ですが、サブクラスではパブリックとして実装します。

自分が何をしているのかを本当に理解していない限り、abstractメソッドを使用して基本クラスを忘れ、非静的メソッドを使用して単一のクラスを作成するだけです。シンプルにしてください。

于 2012-12-19T22:40:21.850 に答える