0

クラスを1つだけのクラスで拡張できることを確認する方法はphpにありますか?

私がやろうとしていることを示すコードがいくつかあります。基本的には、DB マネージャー クラスと、マネージャー クラスによって拡張される DB クエリ クラスがあります。私がやりたいのは、DB クエリ クラスが DB マネージャー クラスでのみ使用できるようにすることです。

以下のコードは機能しますが、非常にラフに見えます。コードでは、クラス名をチェックする単一の抽象関数を使用してクエリ クラスの抽象を宣言します。または、すべての Manager 関数をクエリ クラスで抽象として単純に宣言することもできます (これはハックのようです)。以下の私のコードよりも簡単な方法があれば、それは非常に便利です...

abstract class DB_Query {

    private static $HOST = 'localhost';
    private static $USERNAME = 'guest';
    private static $PASSWORD = 'password';
    private static $DATABASE = 'APP';


//////////
/* USING ABSTRACT FUNCTION HERE TO ENFORCE CHILD TYPE */

abstract function isDB();

/* OR USING ALTERNATE ABSTRACT TO ENFORE CHILD TYPE */

    abstract function connect();
    abstract function findConnection();
    abstract function getParamArray();
//////////


    private function __construct() { return $this->Connect(); }
    public function Read($sql) { //implementation here }
    public function Query($sql) { //implementation here }
    public function Fetch($res, $type='row', $single='true') { //implementation here }

}

class DB extends DB_Query {

    public $connections = array();
    public static $instance;

    public function isDB() {
        if (get_parent_class() === 'Database' && get_class($this)!=='DB') {
            throw new \Exception('This class can\'t extend the Database class');
        }
    }

    public function connect($host=null,$user=null,$pass=null,$db=null) { //implementation here }
    function findConnection($user, $password=null) { //implementation here }
    public function getParamArray($param) {}
    public function threadList() {}
    public function getThread($threadId=null) {}
    public static function Singleton() { //implementation here }
    private function __construct() { //implementation here }

}
4

2 に答える 2

0
class Database_Query extends Database {

    public static $instance;
    public function Query($sql) {}
    public function Fetch($res, $type='row', $single='true') {}
    public static function Singleton() {}

    private function __construct() {
        $this->link = $this->connect()->find('guest')->getLink();
    }

}
于 2013-08-21T16:09:01.643 に答える