L’approche statique comme solution aux problèmes croisés dans WordPress

Jrsquoa i récemment écrit un article sur la programmation orientée objet (oop) pour le développement PHP. Ce que jrsquoessaie de souligner, crsquoest que lrsquoutilisation de classes ne génère pas de code OOP et ne lrsquoutilise pas toujours mieux. Oop implique lrsquoutilisation de classes pour créer des objets réutilisables. Nous utilisons souvent des classes comme collections de fonctions avec des espaces de noms, manquant des points oop. Mais cela ne signifie pas que tout le code doit être
Lrsquoéquilibre entre les principes de conception de logiciels (qui contribuent généralement à la réalisation de ces objectifs) et la nécessité de faire en sorte que quelque chose fonctionne et fonctionne bien est toujours une tâche ardue. Dans je voudrais aborder les questions transversales avec quelques exemples pratiques. Ces exemples nous mèneront à une discussion sur les méthodes statiques et les attributs de classe. Vous voudrez peut être examiner un article récent que jrsquoa i écrit sur les méthodes statiques et les propriétés dans une classe. ce concept est nouveau pour , qursquoest ce qursquoune préoccupation croisée? Nous avons tendance à considérer le Code orienté objet comme une hiérarchie verticale. Une classe étend lrsquoautre et est basée sur nous. Cependant, certaines activités srsquoétendent sur plusieurs hiérarchies de classe, tout comme elles coupent horizontalement sur ces hiérarchies.
Ces « questions transversales » srsquoappliquent à plusieurs parties de la demande. Lrsquoexemple classique en est lrsquoenregistrement sonore. Crsquoest le type drsquoactivité qui doit être utilisé dans de nombreuses classes. Nous ne voulons pas nous répéter en coupant et en collant la même méthode drsquoenregistrement dans toutes les classes, donc nous pourrions essayer de créer une classe Bass abstraite
Et srsquoétend à toutes les classes, y compris les méthodes drsquoenregistrement. Il srsquoagit drsquoune utilisation inappropriée de lrsquoextension de classe, qui devient rapidement confuse. Une autre façon est drsquoinsérer lrsquoenregistrement dans une fonction qui nrsquoest dans aucune classe. Il peut fonctionner, mais la fonction manque de nombreuses fonctions de classe: visibilité, attributs, etc. Lrsquoutilisation drsquoune fonction pour enregistrer un système au lieu drsquoune classe produit une fonction puissante, peut être globale.
Une meilleure façon est drsquoutiliser une classe qui contient toutes les méthodes statiques pour traiter les enregistrements. La mise en cache est un autre problème de section transversale courant. Par exemple, le cache d’objets WordPress est utilisé dans toute l’application. Le cache drsquoobjets est suivi dans la variable globale $WP _ Object cache et il existe de nombreuses fonctions qui peuvent utiliser cette variable. Lrsquoutilisation de fonctions globales nrsquoest pas idéale, mais elle permet de suivre les valeurs mises en cache dans lrsquoensemble de lrsquoapplication. Exemple: Suivez les crochets supprimés comme exemple réel, en supposant que devez supprimer tous les callbacks sur un crochet particulier. Vous pouvez le faire en utilisant la fonction remove _ all filters (). Mais si deviez les ajouter à nouveau? Vous devez outrepasser les mêmes appels add _ action Add filter (), y compris ceux du plug in et du sujet, que nrsquoavez pas écrits et qui sont donc difficiles à maintenir.
Une meilleure façon est de stocker lrsquoenregistrement de lrsquoopération supprimée et de le remettre facilement en place, en utilisant lrsquoenregistrement stocké. Cela signifie que nous avons besoin drsquoune variable, et je veux qursquoil srsquoagisse drsquoune propriété de classe, pas drsquoune propriété globale, qui peut être utilisée comme enregistrement. Voyons deux façons de créer une telle classe. Voici la première, qui nrsquoutilise pas de méthode statique: la classe removation {
* *
Crochets drsquoenlèvement des rails
* *
Tableau des variables
*
$protégé supprimé = []
* *
Supprimer tous les rappels
If (isset (self: $deleted [$Hook]) {
$Hook = self: $deleted [$Hook]
(! Empty ($Hook) {
(Class _ present (lsquoWP Hookrsquo) {
$Priority = $Hook gt Callback
Autres
$Priority = $Hook
}
Foreach ($Priority = gt $Callback)
Foreach ($called)
Ajouter un filtre ($Hook, $Callback [lsquoFunction], $Priority, $Callback [lsquo accepted _ args])
}
}
}
}
}
} en ce qui concerne les méthodes et attributs statiques, il est important de garder à lrsquoesprit que pouvez y accéder sans créer drsquoinstance de la classe. Cela signifie que lorsque nous utilisons Remover:: remove _ All (), il utilise lrsquoattribut statique $removed, nous nrsquoavons pas à nous soucier de tracer lrsquoInstance, et lorsque nous retournons plus tard pour utiliser Remover:: Re add (), il recherche $remove dans le même attribut pour tracer le crochet.
Maintenant jrsquoai un système fondamentalement global pour suivre lrsquoenlèvement des crochets sans utiliser de variables globales. Je nrsquoai pas à mrsquoinquiéter des conflits avec drsquoautres plug ins ou sujets qui utilisent autrement le même nom global, ni de lrsquoabus de lrsquoattribut $removed, car lrsquoaccès à celui ci est contrôlé par ma classe. Dans jrsquoai introduit le concept de préoccupation transversale. Jrsquoai également parlé des classes qui utilisent toutes les méthodes statiques comme solution aux problèmes transversaux qui nécessitent plus drsquoune fonction. Gardez à lrsquoesprit que lrsquoobjectif nrsquoest pas de respecter des principes pour des raisons de principe, mais de résoudre des problèmes plutôt que de créer une dette technique inutile.
Jrsquoespère que cela améliorera votre capacité à concevoir du Code PHP orienté objet dans de grands projets. Pour moi, il est difficile de résoudre ces problèmes qui doivent être résolus dans de nombreux aspects différents du projet. Maintenir mon programme drsquoétudes en respectant le principe de la responsabilité unique sans me répéter a toujours été un défi. Prends ça.
La connaissance du concept drsquointérêt horizontal mrsquoa aidé à comprendre le problème et à trouver des solutions nouvelles et plus utiles.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

ContactPress Supported By WordPress Plugins