7.7.4 单态(单例、单件)设计模式
单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在。
<?php
class DB {
private static $obj = null; //声明一个私有的,静态的成员属性$obj
private function __construct() { //私有构造方法,只能在类的内部实例化对象
echo "连接数据库成功<br>";
}
public static function getInstance() { // 通过此静态方法才能获取本类的对象
if(is_null(self::$obj)) //如果本类中的$obj为空,说明还没有被实例化过
self::$obj = new self(); //实例化本类对象
return self::$obj; //返回本类的对象
}
public function query($sql) { //执行SQL语句完成对数据库的操作
echo $sql;
}
}
$db = DB::getInstance(); //只能使用静态方法getInstance()去获取DB类的对象
$db -> query("select * from user"); //访问对象中的成员
test.php
<?php
/*
* 单态(单例, 单件)设计模式 -- 最适合PHP使用这个设计模式
*
*
* 1. 如果想让一个类, 只能有一个对象, 就要先让这个类, 不能创建对象 , 将构造方法 private
*
* 2. 可以在类的内存使用一个表态方法,来创建对象
*
*
*/
class Person {
static $obj = null;
private function __construct() {
}
static function getObj() {
//如果第一次调用时, 没有对象则创建, 以后调用时, 直接使用第一次创建的对象
if(is_null(self::$obj))
self::$obj = new self;
return self::$obj;
}
function __destruct() {
echo "################<br>";
}
function say() {
echo "aaaaaaaaaaaaaaaaa<br>";
}
}
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p -> say();