Maison  >  Article  >  développement back-end  >  Comment implémenter un modèle singleton en php

Comment implémenter un modèle singleton en php

王林
王林original
2020-07-23 15:23:473594parcourir

Comment implémenter le mode singleton en PHP : Pour implémenter le mode singleton, vous devez vous assurer qu'une classe n'a qu'une seule instance et fournir un point d'accès global pour y accéder. Le modèle singleton ne crée pas de copie de l'instance, mais renvoie une référence à l'instance stockée dans la classe singleton.

Comment implémenter un modèle singleton en php

Définition du modèle singleton :

(tutoriel recommandé : tutoriel php)

Assurez-vous qu'il n'y a qu'une seule instance d'une classe et fournissez-lui un point d'accès global. Il ne crée pas de copie de l'instance, mais renvoie une référence à l'instance stockée en interne dans la classe singleton.

Trois éléments du modèle singleton :

  • Nécessite une variable membre statique qui contient une instance unique de la classe.

  • Les constructeurs et les fonctions de clonage doivent être déclarés privés pour empêcher les programmes externes de créer ou de faire des copies de l'instance.

  • doit fournir une méthode statique publique pour accéder à cette instance, renvoyant ainsi une référence à l'instance unique.

Implémentation du code :

class Singleton
{
    //创建静态私有的变量保存该类对象
    static private $instance;

    //防止使用new直接创建对象
    private function __construct(){}

    //防止使用clone克隆对象
    private function __clone(){}

    static public function getInstance()
    {
        //判断$instance是否是Singleton的对象,不是则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function test()
    {
        echo "我是一个单例模式";
    }
}

$sing = Singleton::getInstance();
$sing->test();
$sing2 = new Singleton(); //Fatal error: Uncaught Error: Call to private Singleton::__construct() from invalid context in
$sing3 = clone $sing; //Fatal error: Uncaught Error: Call to private Singleton::__clone() from context

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn