PHP 面向对象OOP开发之单例设计模式
/*
# 单例设计模式
*/
class multiObj{
public function __construct(){
echo " DataBase Linked <br />";
}
public function select(){
echo "select *";
}
}
$obj1 = new multiObj(); # 生成 Obj#1
$obj2 = new multiObj(); # 生成 Obj#2
$obj3 = new multiObj(); # 生成 Obj#3
var_dump($obj1);
var_dump($obj2);
var_dump($obj3);
/* 单例设计模式,可以防止类被多次的实例化 */
class singleObj{
static $obj = null; # 用来标记实例,默认不存在
private function __construct(){
echo "<br />DataBase Linked<br/>";
}
static function getObj(){
if(is_null(self::$obj)){ # 判断实例是否存在
self::$obj = new self();
#不存在则实例化类生成实例 , singleObj()换成self()
}
return self::$obj; # 存在实例,直接返回实例
}
public function select(){
echo "select *";
}
}
$sobj1 = singleObj::getObj(); # 不存在实例 生成Obj #4
$sobj2 = singleObj::getObj(); # 存在实例 返回Obj #4
$sobj3 = singleObj::getObj(); # 存在实例 返回Obj #4
var_dump($sobj1);
var_dump($sobj2);
var_dump($sobj3);
为了防止对象从外部克隆时生成重复对象,还应当增加一个private function __clone(){}
方法。
基本上,要实现单例模式,需要禁用构造方法和克隆方法,禁用的方法也很简单,只要加上private 修饰即可。