クラスを動的に拡張することはお勧めしません。可能性はありますが、多くの望ましくない副作用を持つ非常に悪い設計です。少なくとも 1 つ: そのクラスの 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);
ただし、これはほんの一例です。動的コード生成を防止する他の方法を見つけることができます。