Maison > Article > développement back-end > PHP peut-il implémenter singleton ?
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.
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!