Heim >Backend-Entwicklung >PHP-Tutorial >Analyse des Singleton-Musters im PHP-Entwurfsmuster

Analyse des Singleton-Musters im PHP-Entwurfsmuster

一个新手
一个新手Original
2017-10-09 09:11:331516Durchsuche

Singleton-Modus Wie der Name schon sagt, gibt es nur eine Instanz. Als Objekterstellungsmodus stellt der Singleton-Modus sicher, dass es nur eine Instanz einer bestimmten Klasse gibt, und er instanziiert sich selbst und stellt diese bereit Instanz auf das gesamte System.

Drei Schlüsselpunkte des Singleton-Musters:

1. Eine Klasse kann nur eine Instanz haben.

 2. Sie müssen diese Instanz selbst erstellen.

 3. Sie müssen diese Instanz selbst für das gesamte System bereitstellen.

Warum PHP-Singleton-Muster verwenden?

 1. Ein wichtiger Aspekt der PHP-Anwendung ist für Regarding In der Datenbank gibt es eine große Anzahl von Datenbankoperationen in einer Anwendung. Wenn Sie den Singleton-Modus verwenden, können Sie bei der objektorientierten Entwicklung eine große Anzahl von Ressourcen vermeiden, die durch neue Vorgänge verbraucht werden, und Datenbankverbindungen reduzieren dass es weniger wahrscheinlich ist, dass es zu einer Situation mit zu vielen Verbindungen kommt.

 2. Wenn ein System eine Klasse benötigt, um bestimmte Konfigurationsinformationen global zu steuern, kann diese einfach mithilfe des Singleton-Musters implementiert werden.

3. Das Debuggen in einer Seitenanforderung ist einfach, da der gesamte Code in einer Klasse konzentriert ist und in der Klasse Hooks für die Ausgabe gesetzt werden können Protokolle und vermeiden Sie var_dump(), Echo überall.

Fall:

/**
 * 设计模式之单例模式
 * $_instance必须声明为静态的私有变量
 * 构造函数必须声明为私有,防止外部程序new类从而失去单例模式的意义
 * getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用
 * ::操作符只能访问静态变量和静态函数
 * new对象都会消耗内存
 * 使用场景:最常用的地方是数据库连接。
 * 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
 */
class man
{
    //保存例实例在此属性中
    private static $_instance;

    //构造函数声明为private,防止直接创建对象
    private function __construct()
    {
        echo '我被实例化了!';
    }

    //单例方法
    public static function get_instance()
    {
        var_dump(isset(self::$_instance));
        
        if(!isset(self::$_instance))
        {
            self::$_instance=new self();
        }
        return self::$_instance;
    }

    //阻止用户复制对象实例
    private function __clone()
    {
        trigger_error('Clone is not allow' ,E_USER_ERROR);
    }

    function test()
    {
        echo("test");

    }
}

// 这个写法会出错,因为构造方法被声明为private
//$test = new man;

// 下面将得到Example类的单例对象
$test = man::get_instance();
$test = man::get_instance();
$test->test();

// 复制对象将导致一个E_USER_ERROR.
//$test_clone = clone $test;

Das obige ist der detaillierte Inhalt vonAnalyse des Singleton-Musters im PHP-Entwurfsmuster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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