我不會建議動態地擴展類。儘管這可能是一個非常糟糕的設計,但會產生許多不必要的副作用。至少告訴一個:你將如何爲該類生成一個API文檔? (知道這是最小的問題)
與註釋的其他信息:你想建立像一個ORM可以與不同的數據庫,我首先想到的PDO。它允許使用相同的接口訪問大量數據庫。
如果出於某種原因需要一個非PDO的解決方案,你可以做一個設計是這樣的:
<?php
class DatabaseStorage {
/**
* @var DB_Mysql|DB_SQLite|DB_Postgres ...
*/
protected $database;
/**
* @param DB_Mysql|DB_SQLite|DB_Postgres ... The inner database to be used
*/
public function __construct($database) {
$this->database = $database;
}
/**
* Connect to the database
*/
public function connect($host, $user, $password) {
$this->database->connect($host, $user, $password);
}
/**
* Query the database
*/
public function query($query) {
return $this->database->query($query);
}
// other methods may follow
}
然後使用類是這樣的:
$databaseType =$_GET['databaseType'];
// you should check the value before using it!!
/*if(!is_valid_database_type($databaseType)) {
die('BAD input');
}*/
$databaseClass = 'Database' . $databaseType;
$database = new $databaseClass();
// use $database as argument to the storage constructor
$storage = new DatabaseStorage($database);
然而,這僅僅是一個例子。你會發現其他的方式從動態代碼生成,預防,
這是一個糟糕的設計方法。 – hek2mgl
其他建議? – prashu132
@ hek2mgl:我找到了解決我的問題的方案。請驗證它是否是一種好方法。 – prashu132