Для синглтон-классов модель, которой следует Дэн Брин , является самой чистой и очень распространенной. Однако в этом случае я бы также позволил методу getInstance
принять некоторые параметры, чтобы вы могли переопределить конфигурацию по умолчанию во время создания экземпляра или просто получить ссылку без создания подключения (оба варианта использования происходят время от времени ).
database.php
require_once("../path/to/config/database.php");
class Database {
private static $instances = array();
private function Database($host, $user, $password, $name) {
// do init stuff
}
public static getInstance(
$host=DB_HOST, $user=DB_USER, $password=DB_PASSWORD, $name=DB_NAME
) {
$key = strtolower($host . $user . $password . $name);
if ( !$self::instances[$key] ) {
$self::instances[$key] = new Database($host, $user, $password, $name);
}
return $self::instances[$key];
}
}
.. конфиг / database.php:
define("DB_HOST", "localhost");
define("DB_USER", "mrsqlguy");
define("DB_PASS", "!!!");
define("DB_NAME", "just_another_wordpress");
Редактировать: я изменил его, чтобы он больше походил на муху, чтобы вы могли получить только один экземпляр для каждого места подключения / базы данных. Это решает ваши проблемы и поддерживает определенную степень гибкости.