J'essaie de m'éloigner du modèle Singleton lorsqu'il s'agit de développer des plugins pour WordPress.
Pourquoi?
Parce que j'ai lu dans certaines sources ( ici , ici , ici , ICI ...) et est venu avec la conclusion qu'ils sont une mauvaise chose. Ou du moins, pas quelque chose que l'on ne faut utiliser juste parce que.
Pourquoi aurais-je besoin d'un comportement semblable à un singleton?
Parce que je veux avoir un objet avec des propriétés où plusieurs classes le long de différents plugins peuvent écrire et lire ces propriétés.
Et je ne sais sincèrement pas comment aborder cela.
Pouvez-vous s'il vous plaît laissez-moi savoir comment vous le feriez?
Il peut y avoir des cas différents avec différentes solutions, je suppose donc un exemple réel.
exemple :
Un plug-in appelé "exemple exemple" Crée un formulaire personnalisé sur le WordPress site.
Le formulaire est traité via une méthode ajoutée au init crochet par la classe de plug-in.
public static function setup_actions_and_filters(){
$this_class = new self();
add_action('init', [$this_class, 'process_form']);
....
Et tout en traitant le formulaire, je voudrais ajouter des messages d'erreur ou de réussite à l'instance active, je peux alors afficher ces messages dans un thème faisant quelque chose comme:
$instance_of_PLUGINCLASS->show_errors();
Mais je n'ai pas accès à l'instance "originale" parce que j'ai appelé une méthode de configuration satic dans le fichier de plugin principal.
PLUGINCLASS::setup_actions_and_filters();
Et c'est pourquoi une solution commune consiste à faire utiliser la plug-comprendre le motif singleton, que je veux éviter.
Est-ce que je suis arrivé avec mes propres idées?
Oui.
Je pensais à:
Pensé qu'il pourrait être utile de résumer certains des points des commentaires ici. (Remarque: 'Singleton' est un nom donné au modèle de stockage d'une instance d'une classe dans une propriété statique d'une classe, généralement la même chose, donc ici "singleton" et "la propriété statique" sont plus ou moins interchangeables))
Il a suivi les bons conseils sur les singletons et les avertissements sur les mauvaises habitudes qu'ils peuvent vous obtenir, mais ne vous laissez pas arrêter d'utiliser des singletons ou des propriétés statiques. Comme en utilisant des variables globales, ou non la structuration de votre code bien dans des fonctions et des fichiers, ou non de la commentaires de votre code ou de nommer de bien vos variables; Ou mille autres autres habitudes de programmation, si vous n'êtes pas au courant des strucutres que vous utilisez et que vous prenez soin de bonnes habitudes de programmation, votre vie (et peut-être la vie des autres peuples) deviendra plus tard.
Sans aller à l'extérieur du PHP processus et sa mémoire, vous avez simplement deux options pour partager des variables entre les champs:
Il n'y a pas d'autres options. Dans le Wordpress CodeBase, où vous ne pouvez pas modifier la structure des swues de code uniquement pour transmettre votre variable autour de soi, vous devez donc utiliser l'une de ces deux options. La question n'est pas si Mais comment tu les utilises.
ICI Mes pensées sur les options de base disponibles. Cela vaut la peine d'envisager lequel d'entre eux a du sens pour vous. Un bon développement sans optimisation prématurée suggérerait que vous devriez utiliser le plus simple qui prend en charge ce que vous connaissez de vos exigences maintenant, avec flexibilité pour modifier votre code si/lorsque vous en avez besoin.
Faire preuve de créativité. Contrôle d'accès au-dessus d'une classe de configuration? Utilisez une array ou une structure de données de file d'attente au lieu d'une seule variable? Employer WordPress filters
pour transmettre des valeurs autour et exposez les interfaces d'importation dans votre code vers d'autres utilisateurs?
Certaines petites caractéristiques soignées pourraient vous faire économiser une tonne de chagrin d'amour pour attraper des situations où, par exemple: