Maison  >  Article  >  développement back-end  >  PHP peut-il implémenter singleton ?

PHP peut-il implémenter singleton ?

藏色散人
藏色散人original
2021-04-01 09:25:551469parcourir

PHP peut implémenter un singleton.La méthode d'implémentation d'un singleton est la suivante : 1. Demander une variable membre statique privée pour enregistrer la seule instance de la classe. 2. Déclarer un constructeur privé pour empêcher la création d'objets ; en dehors de la classe ;3. Déclarez une méthode publique statique pour l'acquisition externe de la seule instance.

PHP peut-il implémenter singleton ?

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3

Comment implémenter un singleton en PHP

  • Appliquer une variable membre statique privée pour enregistrer la seule instance de la classe

  • Déclarer un constructeur privé pour empêcher les objets d'être créé en dehors de la classe

  • Déclarer une méthode publique statique pour l'acquisition externe d'une instance unique

Après avoir terminé ces trois étapes, il est un singleton, mais ce singleton L'exemple n'est pas sûr. Si vous voulez que ce singleton soit sûr, vous devez suivre les deux étapes suivantes (veuillez ajouter s'il y a des imperfections)

  • Déclarer un. méthode de clonage privé pour empêcher l'objet d'être cloné

  • Réécrivez la méthode __sleep et laissez le retour vide pour empêcher la sérialisation et la désérialisation d'obtenir de nouveaux objets

<?php
/**
 * 单列模式(防止对象克隆、对象序列化反序列化)
 * Created by PhpStorm.
 * User: Jeaforea
 * Date: 2019/3/14
 * Time: 17:56
 */
namespace Kanshenmekan\Buzhunkan\Zaikandasini;
class SetSingleton{
    private static $new; //申请一个私有的静态成员变量来保存该类的唯一实例
    private function __construct() {} //声明私有的构造方法,防止类外部创建对象
    public static function instance () { //声明一个静态公共方法,供外部获取唯一实例
        if (!(self::$new instanceof self)) {
            self::$new = new self;
        }
        return self::$new;
    }
    private function __clone() {} //声明私有的克隆方法,防止对象被克隆
    public function __sleep() { //重写__sleep方法,将返回置空,防止序列化反序列化获得新的对象
        return [];
    }
}

[Apprentissage recommandé :Tutoriel vidéo PHP

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