из http://www.php.net/manual/en/class.pdo.phpPHP Singleton PDO
###### config.ini ######
db_driver=mysql
db_user=root
db_password=924892xp
[dsn]
host=localhost
port=3306
dbname=localhost
[db_options]
PDO::MYSQL_ATTR_INIT_COMMAND=set names utf8
[db_attributes]
ATTR_ERRMODE=ERRMODE_EXCEPTION
############
<?php class Database {
private static $link = null ;
private static function getLink () {
if (self :: $link) {
return self :: $link ;
}
$ini = _BASE_DIR . "config.ini" ;
$parse = parse_ini_file ($ini , true) ;
$driver = $parse [ "db_driver" ] ;
$dsn = "${driver}:" ;
$user = $parse [ "db_user" ] ;
$password = $parse [ "db_password" ] ;
$options = $parse [ "db_options" ] ;
$attributes = $parse [ "db_attributes" ] ;
foreach ($parse [ "dsn" ] as $k => $v) {
$dsn .= "${k}=${v};" ;
}
self :: $link = new PDO ($dsn, $user, $password, $options) ;
foreach ($attributes as $k => $v) {
self :: $link -> setAttribute (constant ("PDO::{$k}")
, constant ("PDO::{$v}")) ;
}
return self :: $link ;
}
public static function __callStatic ($name, $args) {
$callback = array (self :: getLink (), $name) ;
return call_user_func_array ($callback , $args) ;
}
} ?>
<?php // examples
$stmt = Database :: prepare ("SELECT 'something' ;") ;
$stmt -> execute () ;
var_dump ($stmt -> fetchAll ()) ;
$stmt -> closeCursor () ;
?>
Мои вопросы:
Что такое синглтон?
Что означает статическое среднее/сделать?
Что такое общественная статическая функция __callStatic (используется?
И как я могу сделать это, что PDO подключается только к базе данных, когда это необходимо? Такие, как запрос или бежать? Так, если класс/объект не используется то он не подключается.
Singletons были предметом много критики на протяжении многих лет, и вы должны избегать их, если это возможно. Это особенно справедливо в средах, где все объекты живут только для запроса. Посмотрите вокруг SO для получения дополнительной информации. – Gordon
@gordon: Синглтоны не являются (!) Плохим решением в целом. Они очень полезны, например, для фронт-контроллеров, объектов запроса и т. Д. Но я также считаю, что его не рекомендуется использовать с объектами базы данных. Но вы не можете сказать «просто избегайте их», я думаю. Это общий дизайн и очень полезный. –
@faileN Singletons (!) - плохое решение в целом. Даже [Эрих Гамма говорит, что сейчас] (http://www.informit.com/articles/printerfriendly.aspx?p=1404056). Я не буду углубляться в это, поскольку это было достаточно объяснено в другом месте. Как я уже сказал, [взгляните вокруг] (http://stackoverflow.com/search?q=singleton+php) – Gordon