PHP单例模式疑惑

WBOY
发布: 2016-06-06 20:39:07
原创
1043 人浏览过

比如下边这个类,这个是我现在常用的代码:

<code><?php class Instance{

    public static $_database;

    public static function Database($_collection=null){
        if(self::$_database === NULL){
            require 'Database.php';
            self::$_database = new Database;
        }
        if($_collection) return self::$_database->collection($_collection);
        else return self::$_database;
    }

}

?>
</code>
登录后复制
登录后复制

如果我执行下边的代码,那么到底是 new 了 Database 几次?到底有没有起到单例的作用?

<code>$collection1 = Instance::Database('test1');
$collection2 = Instance::Database('test2');
$collection3 = Instance::Database('test3');
</code>
登录后复制
登录后复制

回复内容:

比如下边这个类,这个是我现在常用的代码:

<code><?php class Instance{

    public static $_database;

    public static function Database($_collection=null){
        if(self::$_database === NULL){
            require 'Database.php';
            self::$_database = new Database;
        }
        if($_collection) return self::$_database->collection($_collection);
        else return self::$_database;
    }

}

?>
</code>
登录后复制
登录后复制

如果我执行下边的代码,那么到底是 new 了 Database 几次?到底有没有起到单例的作用?

<code>$collection1 = Instance::Database('test1');
$collection2 = Instance::Database('test2');
$collection3 = Instance::Database('test3');
</code>
登录后复制
登录后复制

你在new的前面加个echo调试一下不就知道了?

如果你不愿意动手,那么答案是:只new了一次,之后调用的时候 if(self::$_database === NULL)就为false了,不会再执行到new

调用一次,就new了一次

相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板