单例模式类必要的三大元素:
1、必须拥有一个保存类的实例的静态成员变量。
2、必须拥有一个构造函数,访问级别必须是private(私有的)。
3、必须拥有一个访问类的实例的公共的静态方法,通常被命名为getInstance()。
4、包含一个魔术方法__clone(),方式对象被复制或克隆。
单例模式类特点:
1、不能直接实例化。
2、只能被自身实例化。
单例模式类定义方法:
/***********************************
* 单例模式 类声明方法
***********************************
*@example
*$db = Singleton::getInstance();
*$db->query('SELECT * FROM example_table');
*/
class SingletonClass {
/**
* -------------------------------
* 例子
* -------------------------------
* @var unknown_type
* 非必须
*/
// private $_db;
/**
* ----------------------------
* 保存实例的静态属性
* ----------------------------
* 必须 包含一个类静态属性,保存类的示例
* @var object
* @access private
*/
private static $_instance;
/**
* ----------------------------
* 构造函数
* ----------------------------
* 必须 有一个私有的构造方法,防止外部new实例化
* @access private
*/
private function __construct(){
// $this->_db = pg_content('dbname=example_db');//例子
}
//------------------------------------------------------
/**
* ----------------------------
* 魔术方法
* ----------------------------
* 必须包含一个私有的__clone()方法,防止类实例复制
*/
private function __clone(){}
//------------------------------------------------------
/**
* ----------------------------
* 获取单例类的实例
* ----------------------------
* 必须 包含一个静态获取实例的方法
*/
public static function getInstance(){
//判断是否已经实例化
if(!self::$_instance instanceof self){
self::$_instance = new self();
}
return self::$_instance;
}
//------------------------------------------------------
/**
* ----------------------------
* 例子 数据库连接就是个典型的单例模式
* ----------------------------
* 非必须
*/
// public function query($sql){
// return pg_query($this->_db,$sql);
// }
/**
* ----------------------------
* 其他自定义的方法
* ----------------------------
* 非必须
*/
// public function functionName(){
// //do somethings!
// }
}