<?php
/**
* 单例模式
*
* 以前写单例构造器的时候总是为如何把需要的参数传给类而烦恼
*
* 如果项目中的类文件都采用这种设计的话就ok了
*
* 每次获取实例的时候都可以更新资源变量
*/
class Utils_Common {
private static $_instances = array();
/**
* 单例包装
* @param 类名 $klass
* @param 资源变量 $resource
* @return null object
*/
public static function getInstance($klass, $resource = null) {
if (isset(self::$_instances[$klass])) {
if (null !== $resource) {
self::$_instances[$klass]->setResource($resource);
}
return self::$_instances[$klass];
} else {
if (class_exists($klass)) {
self::$_instances[$klass] = new $klass($resource);
return self::$_instances[$klass];
} else {
return null;
}
}
}
}
class Db {
//参数等资源
private $resource;
public function __construct($resource) {
$this->resource = $resource;
}
public function setResource($resource) {
$this->resource = $resource;
}
public function getResource() {
return $this->resource;
}
protected function getRsrcParams($key) {
return isset($this->resource[$key]) ? $this->resource[$key] : array();
}
protected function setRsrcParams($key, $value) {
$this->resource[$key] = $value;
}
public function go() {
echo 'success:' . $this->getRsrcParams('host');
}
}
header('Content-Type:text/plain;charset=utf-8');
Utils_Common::getInstance('Db', array('host' => 'localhost'))->go();