Joh*_*nny 7 php singleton pdo design-patterns
来自http://www.php.net/manual/en/class.pdo.php
###### 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 ( ) ;
?>
Run Code Online (Sandbox Code Playgroud)
我的问题是:
什么是单身人士?
静态意味着什么?
什么是公共静态函数__callStatic(用于?
我怎样才能做到,PDO只在需要时连接到数据库?如查询还是逃避?因此,如果类/对象未使用,则它不会连接.
单例是一种软件设计模式,它将类的启动限制为一个实例。http://en.wikipedia.org/wiki/Singleton_pattern
静态意味着某些东西属于类而不是特定的实例。在 PHP 中,这也意味着静态方法需要用::not来调用->
如果 PDO 链接已经建立,则 _callStatic 返回该链接。否则,它首先创建链接,然后返回它。
第四个问题的答案正是单例模式。它确保仅在需要时建立连接一次。