你的问题是完美的工厂模式使用单例。这个代码是骨架的,这意味着有0验证等,但应该给你一个想法。
class Database
{
private static $dbos = array();
public static function getDbo($dboKey)
{
if (!isset(self::$dbos[$dboKey])) {
switch ($dboKey) {
case 'abcd':
$dbo = new mysqli('localhost', 'my_user', 'my_password', 'my_db_1');
break;
case 'efgh':
$dbo = new new mysqli('localhost', 'my_user', 'my_password', 'my_db_2');
break;
}
self::$dbos[$dboKey] = $dbo;
}
return self::$dbos[$dboKey];
}
}
$result = Database::getDbo($_REQUEST[db])->query("SELECT * FROM ...");
几乎在任何时候你需要在你的代码中使用变量变量,你可能会犯一个错误。尝试重新思考你在使用数组做什么。 – Mike
它其实不是一个变量变量,即时试图从一个变量建立一个对象的名字,所以我可以使用该对象。 –