Maison  >  Article  >  développement back-end  >  Modèle de conception PHP 2 : mode usine, mode singleton, mode arbre d'enregistrement

Modèle de conception PHP 2 : mode usine, mode singleton, mode arbre d'enregistrement

不言
不言original
2018-04-13 16:27:491286parcourir

Le contenu de cet article est le modèle de conception PHP 2 : mode usine, mode singleton, mode arbre d'enregistrement. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

1. Pattern : Générez des objets dans des méthodes ou des classes d'usine au lieu de les créer directement dans le code
Avantages : Lorsqu'une classe commune a besoin de nouveaux à plusieurs endroits, utilisez le modèle d'usine pour faciliter l'expansion et la maintenance de la classe
Répertoire de fichiers : Frame/Factory.php

<?php
namespace Frame;
use Frame\Database;
use Frame\Register;

class Factory
{
    static function createDatabase()
    {
        //$db = new Database(); //正常实例化类
        $db = Database::getInstance();    //获取单例模式的类
        Register::set(&#39;db&#39;,$db);          //将实例化后的类注册到全局注册树中
        return $db;
    }
}
//外部调用得到$db对象
$db = Frame\Factory::createDatabase();
//获取全局注册树中的对象
$db = Frame\Register::get(&#39;db&#39;);
//卸载全局注册树中的对象
$db = Frame\Register::_unset(&#39;db&#39;);
?>

2. Mode Singleton : Seule la nouvelle instanciation d'objets est autorisée au sein de la classe elle-même
Avantages : La classe ne peut pas être nouvelle en externe , et l'objet est créé une fois dans la classe elle-même, économisant ainsi la surcharge des ressources
Répertoire de fichiers : Frame/Database.php

<?php
namespace Frame;

class Database
{
    protected $db;
    
    //单例模式,私有化__construct()方法,不允许外部实例化对象
    private function __construct()
    {
    }
    //实例化本类
    static function getInstance()
    {
        if(self::$db) {
            return self::$db;
        } else {
            self::$db = new self();
            return self::$db;
        }
    }
}
//外部调用
$db = Frame\Database::getInstance();
?>

3. Mode arbre d'enregistrement : enregistrez un objet dans le fichier global arbre d'enregistrement pour une utilisation globale facile
Répertoire de stockage : Frame/Register.php

<?php
namespace Frame;

class Register
{
    protected $objects;
    /*
    *    将实例化后的类注册到全局注册树中
    *    $alias :对象别名
    *    $object:实例化后的对象
    */
    static function set($alias,$object)
    {
        self::$objects[$alias] = $object;
    }
    /*
    *    卸载实例化后的类
    *    $alias :对象别名
    */
    static function _unset($alias)
    {
        unset(self::$objects[$alias]);
    }
    /*
    *    获取实例化后的类对象
    *    $alias : 对象别名
    */
    static function get($alias)
    {
        return self::$objects[$alias];
    }
    
}
?>

Recommandations associées :

modèle de conception php, un espace de noms, chargement automatique des classes , spécifications de codage PSR-0

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