php中有什么方法可以确保一个类可以扩展一个且只有一个类?
我有一些代码来说明我正在尝试做的事情,基本上我有一个数据库管理器类和一个由管理器类扩展的数据库查询类。我想做的是确保数据库查询类只能由数据库管理器类使用。
下面的代码有效,但看起来很粗糙。在代码中,我使用一个检查类名的抽象函数来删除查询类抽象,或者我可以简单地将所有 Manager 函数声明为查询类中的抽象(这看起来很hacky)。如果有比我下面的代码更简单的方法来做到这一点,那将非常有用......
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 }
}