首页 > Web开发 > 详细

php单例模式的研究

时间:2014-03-18 12:14:53      阅读:373      评论:0      收藏:0      [点我收藏+]

几个关键点:

1,对象P应该可以被系统中的任何对象使用

2,对象P不应该被存储在会被覆写的全局变量总

3,系统中不应该超过一个P对象,也就是说,Y对象可以设置P对象的一个属性,而Z对象不需要通过其他对象(假如Y和Z都可以访问P对象)就可以直接获得该属性的值

 

实现:

下面创建了一个无法从其自身外部来创建实例的类,听起来有些难,其实只要简单的定义一个私有的构造方法即可:

bubuko.com,布布扣
<?php
class P{
    private $props=array();
    private function __construct(){}

    public function setProperty($key,$val){
        $this->props[$key] = $val;
    }
    public function getProperty($key){
        return $this->props[$key];
    }
}
bubuko.com,布布扣

上面的类,由于构造方法被设置为私有,客户端代码无法实例化对象。因此setProperty和getProperty方法目前也是多余的。

不过我们可以使用静态方法和静态熟悉来实例化对象:

 

bubuko.com,布布扣
<?php
class P{
    private $props=array();
    private static $instance;

    public static function getInstance(){
        if(empty(self::$instance)){
            self::$instance = new P();
        }
        return self::$instance;
    }

    private function __construct(){}

    public function setProperty($key,$val){
        $this->props[$key] = $val;
    }
    public function getProperty($key){
        return $this->props[$key];
    }
}


$pref = P::getInstance();
$pref->setProperty("name","mattttttt");
var_dump($pref);
unset($pref);//移除引用
$pref2 = P::getInstance();
var_dump($pref2);
$pref2->setProperty("name","masssssssssssss");
var_dump($pref2);
print $pref2->getProperty("name");//该属性值并没有丢失
//输出   matttttttt
bubuko.com,布布扣

php单例模式的研究,布布扣,bubuko.com

php单例模式的研究

原文:http://www.cnblogs.com/jami918/p/3606093.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!