Heim  >  Artikel  >  Backend-Entwicklung  >  PHP单例模式疑惑

PHP单例模式疑惑

WBOY
WBOYOriginal
2016-06-06 20:39:071042Durchsuche

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

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn