Maison  >  Article  >  développement back-end  >  Pourquoi PHP devrait-il utiliser le mode singleton ?

Pourquoi PHP devrait-il utiliser le mode singleton ?

黄舟
黄舟original
2017-09-06 09:43:362529parcourir

La raison pour laquelle PHP utilise le mode singleton : lors d'un développement orienté objet, l'utilisation du mode singleton peut éviter de nouvelles opérations excessives qui consomment beaucoup de ressources. Le mode singleton peut contrôler globalement certaines informations de configuration via une classe.

Pourquoi PHP devrait-il utiliser le mode singleton ?

1. Qu'est-ce que le modèle singleton ?

1. Signification

En tant que mode de création d'objet, le mode singleton garantit qu'une certaine classe n'a qu'une seule instance, et elle s'instancie et la fournit à l’ensemble du système. Fournissez cet exemple. Il ne crée pas de copie de l'instance, mais renvoie une référence à l'instance stockée dans la classe singleton.

L'application de PHP se situe principalement dans les applications de base de données, il y aura donc un grand nombre d'opérations de base de données dans une application lors du développement orienté objet, si vous utilisez le mode singleton, vous pouvez éviter un problème. grand nombre de ressources consommées par les nouvelles opérations. Si une classe est nécessaire dans le système pour contrôler globalement certaines informations de configuration, elle peut être facilement implémentée à l'aide du modèle singleton.

2. Trois points clés du modèle singleton :

(1) Une variable membre statique qui contient la seule instance de la classe est requise :

.
private static $_instance;

(2). Les constructeurs et les fonctions de clonage doivent être déclarés privés pour empêcher les programmes externes de créer de nouvelles classes et ainsi perdre le sens du mode singleton :

private function __construct()   
{   
    $this->_db = pg_connect('xxxx');  
}   
private function __clone()  
{  
}//覆盖__clone()方法,禁止克隆

(3). ). A doit être fourni Accédez à la méthode statique publique de cette instance (généralement la méthode getInstance), renvoyant ainsi une référence à l'instance unique

public static function getInstance()    
{    
    if(! (self::$_instance instanceof self) )   
    {    
        self::$_instance = new self();    
    }  
    return self::$_instance;    
  
}

2. Pourquoi utiliser le modèle singleton ?

La plupart des gens comprennent littéralement l'utilisation du modèle singleton, pensant qu'il économise les ressources du système et évite les instanciations répétées. Il s'agit d'une "planification familiale".

Chaque fois que PHP termine l'exécution de la page, il nettoiera toutes les ressources de la mémoire. Par conséquent, le singleton en PHP doit en fait être ré-instancié à chaque fois qu'il est exécuté, perdant ainsi le sens d'une instanciation répétée du singleton.

De ce seul point de vue, le singleton de PHP est effectivement un peu décevant. Mais un singleton n'a-t-il que cette fonction et cette application ? La réponse est non, jetons un coup d'oeil.

L'application de PHP se situe principalement dans les applications de base de données, il y aura donc un grand nombre d'opérations de base de données dans une application lors du développement de manière orientée objet (non-sens), si vous utilisez le singleton. En mode , vous pouvez éviter un grand nombre d'opérations les ressources consommées par la nouvelle opération.

Si une classe est nécessaire pour contrôler globalement certaines informations de configuration dans le système, elle peut être facilement implémentée à l'aide du modèle singleton. Ceci peut être trouvé dans la partie FrontController de zend Framework.

Dans une requête de page, il est facile de déboguer car tout le code (tel que la classe d'opération de base de données db) est concentré dans une seule classe. Nous pouvons définir des hooks dans la classe et générer des journaux pour éviter l'écho de var_dumping partout. .

1. Inconvénients de PHP :

Le langage PHP est un langage de script interprété. Ce mécanisme d'exploitation permet d'interpréter et d'exécuter toutes les ressources associées.

En d'autres termes, PHP n'a aucun moyen de faire résider un objet en mémoire au niveau du langage. Ceci est différent des types compilés tels que asp.net et Java. Par exemple, en Java, un singleton sera toujours. existent dans l'ensemble de l'application. Dans le cycle de vie du programme, les variables sont au niveau de plusieurs pages, ce qui peut vraiment rendre cette instance unique dans le cycle de vie de l'application.

Cependant, en PHP, toutes les variables, qu'il s'agisse de variables globales ou de membres statiques de la classe, sont au niveau de la page. Chaque fois que la page est exécutée, un nouvel objet sera rétabli, et il le sera. être rétabli après l'exécution de la page. Étant effacé, il semble que le mode PHP singleton n'ait aucun sens.

Je pense donc que le mode PHP singleton n'est très significatif que lorsque plusieurs scénarios d'application se produisent dans une seule requête au niveau de la page et doivent partager la même ressource d'objet.

2. Scénarios d'application du mode singleton en PHP :

(1) Interaction entre application et base de données

Existera dans une application Pour une grande Un certain nombre d'opérations de base de données, telles que la connexion à la base de données via un handle de base de données, l'utilisation du mode singleton peut éviter un grand nombre de nouvelles opérations, car chaque nouvelle opération consomme des ressources mémoire et des ressources système.

(2) Contrôle des informations de configuration

Si une classe est nécessaire pour contrôler globalement certaines informations de configuration dans le système, elle peut être facilement implémentée en utilisant le mode singleton.

Pour plus de connaissances connexes, veuillez visiter le Site Web PHP chinois ! !

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