>  기사  >  백엔드 개발  >  PHP单例模式疑惑

PHP单例模式疑惑

WBOY
WBOY원래의
2016-06-06 20:39:071014검색

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

<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了一次

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.