Boucle en temps réel entre lrsquoutilisateur et lrsquoapplication. Il existe de nombreuses variantes du modèle MVC, mais il comporte généralement trois parties: la vue, le Contrôleur et le modèle.
Une vue ou un modèle définit une représentation visuelle des données en fonction de lrsquoétat actuel du modèle et peut être modifié en fonction de lrsquoentrée de lrsquoutilisateur. Un contrôleur est une médiation entre une vue et une source de données ou une API distante. Vous pouvez également mettre à jour le modèle en fonction de vos interactions avec les vues et les API distantes. Le modèle est lrsquoensemble de données actuel défini par le Contrôleur et affiché par la vue. En général, une application, un cadre ou un langage utilisant une architecture MVC est plus difficile à comprendre qursquoune application, un cadre ou un langage utilisant une architecture basée sur des événements. Ce nrsquoest ni
Certains des cadres créés sur WordPress implémentent le modèle MVC. Crsquoest bien lorsqursquoils srsquoadaptent à des besoins spécifiques, mais il est important de se rappeler qursquoils sont des MVC sur une architecture axée sur les événements. Modèles de conception PHP utiles l’architecture basée sur les événements de WordPress n’est pas en soi un modèle logiciel. Mais il est implémenté en utilisant la variante éditeur abonné du mode observateur. Il ne correspond pas toujours parfaitement aux définitions manuelles de ces modèles, mais cela nrsquoa vraiment pas drsquoimportance. Apprendre ou utiliser des modèles de conception PHP pour ce logiciel ne signifie pas que avez une connaissance impressionnante du sujet ou de lrsquoapplication de cette connaissance. Au lieu de cela, comprendre ces modèles signifie aider à les utiliser au bon moment et savoir srsquoils sont la bonne solution au problème.
Il peut également aider à lire le Code drsquoautres personnes, ce qui est important pour améliorer vos compétences et aider à intégrer ou à déboguer le Code. Lrsquoidentification drsquoun modèle de conception PHP commun peut aider à comprendre le Code que regardez. Non.
Ce sont des modèles de conception de logiciels. J’aimerais plutôt étudier deux modèles formels importants pour les développeurs WordPress. Je voudrais également parler de quelques modèles informels, mais ils sont largement utilisés dans WordPress. Le modèle monopièce est très courant dans le développement de logiciels et de plug ins WordPress, mais il peut être abusé dans le développement de plug ins WordPress.
Lrsquoessentiel du modèle ngleton est de srsquoassurer qursquoil nrsquoy a qursquoune seule instance de la classe qui lrsquoimplémente. En PHP, par défaut, nrsquoimporte quelle classe peut être instantanée nrsquoimporte quel nombre de fois. Dans la plupart des cas, crsquoest bien parce qursquoil permet de créer plusieurs objets avec la même structure en utilisant des classes qui représentent des données différentes. Mais qursquoen est il des classes conçues pour charger des plug ins ou des applications? Pourquoi deux fois? Vous nrsquoavez peut être besoin que drsquoune seule instance de cette classe. Ou, qursquoen est il de la construction drsquoune classe qui contient des objets configurés par un plug in ou une application? De même, un seul exemple de cette classe est significatif.
Vous nrsquoavez besoin que drsquoune instance de la classe, suivie drsquoun nom. ngleton fonctionne en déclarant le générateur de classe privé ou protégé. Dans ce modèle, des variables statiques privées ou protégées sont utilisées pour contenir des instances de la classe. La variable est ensuite récupérée en utilisant une méthode statique commune. Avant drsquoeffectuer cette opération, vérifiez que la variable est nulle et, si elle est nulle, créez une instance de la classe et stockez lrsquoInstance dans la variable. Voici un exemple: lt?php
classe singleton_example {
**
* Contiene l039istanza di classe
*
* @accesso privato
*
* @var singleton_example
*
$instance statica privata
**
* Costruttore privato per prevenire nuove istanze.
*
funzione privata __construct(){
sentiti libero di fare cose che dovrebbero accadere solo una volta qui.
}
**
* Ottieni istanza di classe
*
* @return singleton_example
*
funzione statica pubblica get_instance(){
if( null === self::$istanza ){
self::$istanza = nuovo self()
}
return self::$instance
}
} A causa del costruttore privato, non puoi accedere a questa classe usando la nuova parola chiave in questo modo:
$oggetto = new singleton_example() Ciò farebbe sì che PHP chiami un metodo privato, che è illegale. Invece, otterresti la singola istanza usando il metodo get_instance(): $oggetto = singleton_example::get_instance() Ora la variabile $oggetto contiene l039istanza della classe e puoi usarla per chiamare metodi non statici di quella classe. L039esempio sopra è abbastanza tipico per WordPress poiché supporta PHP 5.2. In alcuni casi, potresti voler sottoclassare una classe che implementa il modello singleton. Non ci sono molti casi in cui vorresti farlo, ma puoi usare associazioni statiche tardive:
lt?php
classe singleton_example_two {
**
* Contiene l039istanza di classe
*
* @accesso protetto
*
* @var singleton_example_two
*
$instance statica protetta
**
* Costruttore protetto per prevenire nuove istanze.
*
funzione protetta __construct(){
sentiti libero di fare cose che dovrebbero accadere solo una volta qui.
}
**
* Ottieni istanza di classe
*
* @return singleton_example
*
funzione statica pubblica get_instance(){
if( null === statico::$istanza ){
static::$instance = new static()
}
return static::$instance
}
} Questo esempio è simile ma utilizza la variabile di istanza protetta. Sostituisce anche la parola chiave self, con la parola chiave static per garantire che PHP si riferisca all039istanza corrente, non all039istanza padre durante la sottoclasse.
Tieni presente che i singleton hanno molti svantaggi e sono abusati in WordPress. Questo non li rende cattivi, ma fai attenzione. Un singleton spesso ha senso per la classe di un plug-in responsabile del caricamento di un plug-in. Votre plug in peut avoir besoin drsquoune seule instance drsquoune classe, mais drsquoautres plug ins qui srsquointègrent à votre plug in ou à un ajout à votre plug in peuvent avoir besoin de leur propre instance. En général, les plug ins WordPress ont une classe principale et une classe séparée qui ajoute des instances de beaucoup d’autres classes, comme pr
Propriété Cela leur permet drsquoéviter plusieurs singletons tout en leur donnant lrsquoavantage drsquoaccéder facilement à des instances spécifiques drsquoune classe particulière. Un autre cas drsquoabus de ngleton est qursquoil nrsquoy a aucune raison fonctionnelle drsquoinstancier une classe plusieurs fois, mais il nrsquoy a aucune erreur à le faire. Souvent, ces classes ne représentent pas vraiment des objets de données, mais plutôt des collections de fonctions connexes. Déclarer toutes les méthodes de ces classes statiques simplifie considérablement le travail. Pattern Factory n’est pas largement utilisé dans WordPress, mais il est compréhensible qu’il puisse générer des systèmes explicitement complexes avec de nombreuses classes indépendantes. La classe qui implémente le modèle drsquousine est utilisée pour construire des objets ou drsquoautres objets dans une classe. Crsquoest pour ça qursquoon appelle ça une usine. Voici un exemple simple drsquousine qui montre comment elle fonctionne. Cette usine de base est utilisée pour construire une instance de la classe wp u post de plusieurs façons: la classe post u Factory {
* *
Var WP _ post
*
$protection tardive
Fonction publique construction ($post = null) {
(IS _ A ($Post, $WP post)) {
$this gt publish = $publish
} ElseIf (IS _ Numerical ($post) | | is a ($Post, lsquostdclassrsquo) {
$u post = get _ Post ($post)
(IS _ Object ($post) {
$this gt publish = $ publish
}
Autres {
$this gt Post = get _ Post ()
}
}
Get _ Post () {fonctions publiques
Retourner $this gt Post
}
} Il srsquoagit drsquoun exemple très simple et peut être drsquoune méthode trop complexe pour srsquoassurer que la variable est en fait un WP _ post. Cela signifie qursquoil limite la nécessité de répéter le Code de validation nrsquoimporte où, tout en veillant à ce que lrsquoobjet WP _ Post, lrsquoID post ou les paramètres de requête WP représentent réellement lrsquoobjet WP post. Encore une fois, crsquoest trop simple, pas vraiment utile et montre les inconvénients du modèle drsquousine. Frais généraux ex
Ça ne vaut peut être pas la peine. Cependant, comme le montre cet exemple, il peut être utilisé pour introduire la validation des entrées, ce qui peut être utile. Carl Alexander a un excellent article sur la conception d’une classe pour gérer les messages WordPress qui vaut la peine d’être Lu lorsque pensez à une telle usine. Mais dans de nombreux cas, cela peut en valoir la peine, ce qui est une bonne façon de créer un système qui crée plusieurs parties drsquoune application à partir drsquoune seule configuration. Par exemple, lorsque nous ajoutons des paramètres drsquoapi rest ou un ensemble de routes, nous définissons généralement des champs pour ces paramètres dans la classe qui gère les routes auxquelles ils appartiennent. Et si on avait besoin de cette configuration ailleurs? Que faire si nous voulons injecter cette configuration dans le générateur de paramètres et drsquoautres générateurs? Nous utiliserons alors une usine ou une autre usine. J’ai récemment publié un générateur de paramètres API WordPress rest qui implémente un modèle d’usine. Bien qursquoil soit utile en soi, je développe également une bibliothèque pour utiliser la même configuration, mais il va créer une interface générée par le tronc en utilisant ces paramètres. Étant donné que la configuration est strictement liée au Code, jrsquoespère qursquoelle srsquoadaptera à la génération drsquointerfaces utilisateur angulaires et, une fois finalisée, à lrsquoadoption des spécifications de lrsquoAPI de terrain. Un autre endroit où une usine peut être utile est le plug in. Les plug ins ont généralement des add ons similaires, utilisent les mêmes crochets et utilisent beaucoup de code répétitif. Une utilisation du modèle drsquousine est de définir automatiquement tous ces crochets. Une des raisons pour lesquelles WordPress Core global utilise des modèles de conception PHP ngleton est qu’il évite d’utiliser des variables globales pour stocker des instances de classes. Un seul exemple introduit lrsquoétat global de la classe dans lrsquoapplication sans ut
Utilisez des variables globales. Les variables globales PHP sont entièrement modifiables. Ils peuvent être désactivés ou redéfinis à tout moment. Nous sommes tous d’accord pour ne jamais changer la variable globale $post dans WordPress en un tableau, mais nous pouvons le faire. Il nrsquoest pas illégal de changer global $post en un tableau aléatoire ou drsquoannuler sa propriété post _ title. La prochaine fois que connectez, un problème apparaît, peut être une erreur fatale. WordPress Core n’utilise pas d’instance unique. Je ne suis pas sûr, mais c’est peut être le produit de WordPress et de son prédécesseur B2 cafelog avant que PHP n’introduise des attributs statiques. Au lieu de cela, WordPress insère de nombreuses instances de classe dans des variables globales. Ces classes ont souvent un générateur commun. Dans le cas de WP _ Rewrite, il est étroitement lié à la règle de réécriture sauvegardée et nrsquoavez peut être pas besoin drsquoautres instances de WP Rewrite que Wp Rewrite dans Global $WP Rewrite. WordPress a été écrit aujourd’hui, wp u Rewrite pourrait implémenter le mode ngleton. Au lieu de: Global $wp u Rewrite
$WP _ Rewrite gt Flush Rules () Nous pouvons utiliser: WP _ Rewrite:: get instance () gt Flush Rules () Mais il peut s’agir d’une surutilisation des modèles de conception PHP ngleton, il peut y avoir une classe WordPress primaire qui a un ngleton et contient des instances telles que Wp _ Rewrite, wpdb, WP rest Server, etc. Global $wp u override est une dette purement technique qui se produit lorsque le projet a plus de dix ans et promet de ne pas compromettre la rétrocompatibilité. Permettez moi de préciser qu’à mon avis, plus « techniquement correct» ne vaut pas la peine de détruire presque tous les sites WordPress. Il est logique d’utiliser des variables globales dans wordpress pour les classes qui ont une
Requête principale basée sur la requête courante. Cela nous permet drsquoinvoquer lrsquoInstance de requête WP _ pour la requête courante et de créer notre propre instance de requête WP pour drsquoautres requêtes. WP _ Query utilise un seul exemple, nous devrions écrire une requête SQL chaque fois que nous avons besoin drsquoexécuter plusieurs requêtes sur des messages dans la même requête, ce qui serait très mauvais. Oui, il y a une meilleure façon de stocker la requête principale, si votre cadre nrsquoa pas plus de 10 ans de stockage, nous lrsquoappelons la requête principale. Je veux dire, ne lâche pas WordPress. Mon point de vue est d’identifier un modèle que nous devrions voir car il nous aide à comprendre WordPress. De plus, il nous aide à comprendre comment nous pouvons faire mieux au travail. Pourquoi? Encore une fois, il ne srsquoagit pas drsquoimpressionner même ou vos amis sur la capacité drsquoidentifier et de mettre en œuvre des modèles de conception PHP communs. Aucun utilisateur final ne se rendra sur le site WordPress et sera impressionné par l’utilisation économique mais raisonnable du modèle ngleton ou par la mise en œuvre du cadre MVC quelque part dans la pile. Cependant, si apprendre à reconnaître ces modèles peut aider à mieux comprendre ce qui se passe dans le Code de quelqursquoun drsquoautre que devez utiliser, ou aider à écrire un meilleur Code, ou mieux conceptualiser le système que utilisez, devriez être en mesure de faire des progrès en tant que développeur.
Modèles de conception PHP de base pour les développeurs WordPress