学新通技术网

PHP的单例设计模式详解

原创 3286 124
 
/* 单例设计模式 (单态) 定义: 一个类 只能允许有 一个对象存在. 
1.不让进: 使类不能被实例化 
2.留后门: 设置静态方法
 3.给对象: 在静态方法里实例化该类
 4.判初夜: 判断是否是 第一次产生该类的对象 
5.设静态: 静态方法里 要使用静态属性 
*/
 /*//1.不让进: 使类不能被实例化----------------- 
class Test { 
// 设置 一个封装的构造方法 
    private function __construct() 
    { 
    //占位, 我就是不让你NEW我~~~ 
    } 
}*/ 
/*//2.留后门: 设置静态方法-------------------- 
class Test { 
    // 设置 一个封装的构造方法
     private function __construct() 
    { 
        //占位, 我就是不让你NEW我~~~ 
    } //后门
     public static function getObject() 
    { 
        echo "啊,我是后门,进吧!
";
     }
 }*/
 /*//3.给对象: 在静态方法里实例化该类------------------ 
class Test { 
// 设置 一个封装的构造方法 
    private function __construct() 
    {
        //占位, 我就是不让你NEW我~~~
     } //后门 
    public static function getObject() 
    { 
        echo "啊,我是后门,进吧!
"; return new self();//实例化一个对象给你
    } 
}*/ 
/*//4.判初夜: 判断是否是 第一次产生该类的对象------------------ 
class Test { 
    private $obj = null;//属性值为对象,默认为null // 设置 一个封装的构造方法 
    private function __construct() { 
        //占位, 我就是不让你NEW我~~~ 
    } //后门 
    public static function getObject() 
    {
       echo "啊,我是后门,进吧!
"; 
          if ($this->obj === null)
        { 
           $this->obj = new self();//实例化一个对象
              } 
             //返回的属性 其实就是本对象 
        return $this->obj;
    }
}*/ 
//5.设静态: 静态方法里 要使用静态属性------------------ 
class Test { 
    private static $obj = null;//属性值为对象,默认为null 
    // 设置 一个封装的构造方法 
    private function __construct() 
    { 
        //占位, 我就是不让你NEW我~~~ 
    } //后门 
    public static function getObject()
    { 
        echo "啊,我是后门,进吧!
"; 
        if (self::$obj === null) 
        { 
             self::$obj = new self();
//实例化一个对象
         } 
        //返回的属性 其实就是本对象
       &nbsp本文出至:学新通博客网络博客; return self::$obj; 
    } 
} 
/*Test::getObject();//使用静态方法访问该类里的方法 exit;*/
$t1 = Test::getObject();
$t2 = Test::getObject(); 
$t3 = Test::getObject();
$t4 = Test::getObject();
$t5 = Test::getObject();
$t6 = Test::getObject(); 
$t7 = Test::getObject();
$t8 = Test::getObject(); 
//判断 两个对象 是否是同一个对象
if ($t1 === $t6) { 
   echo "哦, Yes! 是同一个实例
"; 
} else {
    echo "哦, No! 不是同一个实例
";
}


本文出至:学新通博客

标签: