Quelles méthodes de magie PHP les développeurs de WordPress doivent savoir

avez vérifié le Code PHP, avez probablement rencontré une méthode magique: Vous pouvez dire que crsquoest une méthode magique parce qursquoelle est précédée de deux caractères soulignés. nrsquoutilisez pas ces outils, devriez le faire. Une méthode magique est une fonction qui permet de montrer à un objet comment réagir lorsque quelque chose arrive à lrsquoobjet. Vous pouvez définir comment les objets réagissent à un événement. Crsquoest un énorme outil pour prévenir les erreurs et réduire le Code redondant. Dans je vais montrer quelques unes des méthodes magiques que PHP offre. Jrsquoai choisi ces méthodes parce qursquoelles sont plus utiles pour et aident à comprendre comment elles fonctionnent.
La méthode magique la plus courante pour construire ce qursquoil fait est Construct (). Cette fonction est appelée immédiatement après lrsquoInstanciation de la classe. Il a différentes utilisations. Le premier but est drsquoinjecter des données dans une classe. Par exemple, lorsque nous créons une instance drsquoune classe WP _ query, nous passons habituellement un tableau de paramètres directement à elle: $args = [lsquopost type = gtrsquo hiroy lsquo] $ Query = new WP _ Query ($args) Lorsque nous passons les paramètres de la classe à lrsquoInstanciation, ils sont passés à son constructeur. Cela nous permet drsquoavoir une classe qui génère différents objets.
La deuxième utilisation est de déclencher une séquence drsquoévénements qui doit se produire avant que lrsquoobjet ne soit disponible. Par exemple, supposons que ayez une classe conçue pour créer des balises HTML spécifiques qui exécutent une partie du travail basé sur une collection de messages. Nous pouvons utiliser le constructeur pour activer le processus de création de HTML afin qursquoil soit prêt au besoin, ou pour déclencher une erreur plus tard. Ceci est utile lorsque utilisez
Souvent, cela semble être une bonne idée, mais pas pour la compatibilité future. De plus, ce pseudo constructeur ne peut pas être déclaré statique, sinon une erreur sera générée. Il est courant de mettre des crochets dans une constante pour ajouter des crochets au générateur de classe. Crsquoest peut être une mauvaise idée parce que le crochet qui appelle lrsquoobjet courant avec $this Reference est difficile à détacher. Il réduit également la réutilisabilité des classes. Une solution consiste à déplacer le crochet hors du contexte de lrsquoobjet. Une autre approche consiste à garder tous les crochets dans une classe spécifique ou une classe de configuration qui nrsquoa pas besoin drsquoinstancier deux fois pour des raisons fonctionnelles, ou à mettre en œuvre un modèle drsquoinstance unique pour srsquoassurer qursquoils ne sont instanciés qursquoune seule fois.
Une autre option est drsquoutiliser les fonctions
}
}
Fonction protégée add _ Hooks () {
Ajouter un crochet
Do _ action (lsquoinit stuffrsquo)
}
Cette solution est réalisable, mais je pense que lorsqursquoelle fonctionne, elle montre qursquoune classe viole le principe de la responsabilité individuelle. En général, je pense que les méthodes communes pour toutes les classes drsquoune classe qui ont ajouté des crochets devraient être utilisées uniquement par ces crochets.
Magic Setter and getter en général, lorsque nous parlons de méthodes
}
* *
Obtenir une requête wp U
* *
Retour à la requête
*
Fonction publique get _ Q
Uery () {
Renvoie $this gt Query
}
* *
Définir les propriétés de la requête
* *
Parameter string $First
Après la chaîne de paramètres
*
Fonction protégée set _ Query ($before, $after) {
$paramètre = tableau
« date _ query» = gt Array
Aprèsrsquo = gt $avant,

()
« trier par» = gt « nombre de commentaires»,
« séquence» = gt « Description»,
lsquoposts _ per pagersquo = gt lsquo5rsquo,

)
$this gt Query = new wp u Query ($Parameter)
}
La classe a une propriété protégée appelée query. Il est défini par la méthode set _ Query (). La méthode est protégée parce qursquoil est logique de ne lrsquoinvoquer qursquoune seule fois. Il est appelé par le générateur, puis terminé.
Il est protégé contre les modifications apportées à ces objets après leur Instanciation. Drsquoaccord, mais si je ne peux pas faire quelque chose avec cet objet, cet objet est inutile. Crsquoest pourquoi nous avons la méthode getter get _ Query (), qui ne renvoie que la propriété $query. Lrsquoutilisation de get et set pour getter et Setter est une convention, mais non obligatoire. Php fournit un getter magique qui, srsquoil existe, est appelé lorsque accédez aux propriétés en dehors de la portée de lrsquoobjet. Vous pouvez utiliser la méthode magique get () pour exposer une partie ou la totalité des méthodes protégées et privées drsquoune classe.
Magic get () passe le nom de lrsquoattribut. Cela permet de retourner des propriétés spécifiques ou drsquoautres contenus. De plus, voudrez peut être appeler Setter en utilisant get (). La méthode magique set () passe le nom de lrsquoattribut à définir et sa valeur. Il peut être utilisé pour créer nrsquoimporte quel Setter pour tous les attributs de la classe et pour rendre certains ou tous les attributs protégés et privés disponibles pour lrsquoécriture à partir de lrsquoextérieur de la classe. Les getters magiques et les Setters sont utilisés à des fins telles que la validation des types avant de permettre la modification des propriétés. Par exemple, une classe dont les propriétés sont modifiables
Soyez habile à lrsquoextérieur de lrsquoobjet, mais assurez que le type reste le même.
Voici une classe qui utilise nrsquoimporte quelle requête wp u via la section fournie. Résoudre le problème que les propriétés publiques peuvent changer de type. changez la propriété $QUERY en un tableau ou un objet drsquoune classe autre que Wp _ query, cette classe génère une erreur. Partial _ partial = $partial partial
}
Ensemble commun de fonctions ($attribut, $valeur) {
(lsquoQueryrsquo = $Property amp amp (IS _ A ($value, lsquoWP Queryrsquo) {
$this gt Query = $Value
}
}
Fonctions publiques get ($property) {
If (lsquoQueryrsquo = $property) {
Renvoie $this gt Query
}
}
Output _ Loop () {fonctions publiques
$QUERY = $this gt Query
Ob _ Start ()
Foreach ($QUERY gt publish as $publish) {
$post = Setup _ postdata ($post)
Inclure $this gt partial _ partial
}
Retourner Ob _ get Clean ()
}
}
Notez que lrsquoutilisation de ces types de get () et set () ne les rend pas plus compacts que lrsquoutilisation de getters et Setters explicites. Cela réduit également lrsquoutilité des documents en ligne. Cela montre la faiblesse de lrsquoutilisation des méthodes Magic get et set.
En théorie, pouvez créer une classe qui permet de définir ou de récupérer des propriétés. Voici une classe comme stdclass, mais vérifiez que la propriété est définie avant de la renvoyer à la méthode magique get (): $ Propriétés)
Renvoie lrsquoattribut $this gt $
}
}
* *
Ajouter du contenu à cette classe
* *
Parameter string $property property property name
Paramètre de mélange $valeur à définir
*
Ensemble commun de fonctions ($attribut, $valeur) {
$this gt $property = $Value
}
}
Les getters et Setters magiques primitifs sont utiles lorsqursquoune classe a beaucoup drsquoattributs, mais tous les attributs ne sont pas disponibles à chaque fois. Ceci est utile pour de nombreux attributs qui doivent être définis à
Classe abstraite
Ensemble CK U
* *
* obtient les propriétés de cette classe: si elle existe, elle appellera cette {propriété _ name}. elle nrsquoest pas définie, il y a une telle méthode
* *
Parameter string $property property property name
* *
Renvoie une valeur de propriété mixte
*
Fonctions publiques get ($property) {
(property _ exists ($this, $property) {
(! Isset ($this gt $property) amp amp Method _ existe ($this, lsquoSet property)) {
Call _ user func ([$this, lsquoSet property])
}
Renvoie lrsquoattribut $this gt $
}
}
}
La classe a des propriétés calculées qui peuvent être supprimées avant la sérialisation et recalculées après la sérialisation. Cela permet drsquoéconomiser de lrsquoespace dans la base de données et drsquoaccélérer les requêtes. Par exemple, considérez une classe qui crée des objets pour le taux de conversion drsquoune page. Le taux de conversion est le nombre de conversions divisé par le nombre de vues de page. Voici un exemple de classe qui accepte la conversion et la vue de page et calcule le taux de conversion, qui utilise à la fois le sommeil et le réveil, et fournit un autre exemple utile de la méthode magique get (): Conversion = $Conversion
$this gt total = $total
}
* *
Renvoie le nombre de points flottants | int
*
Get _ Conversion Rate () {fonctions publiques
Retourner $this gt conversion _ rate
}
Fonction commune sleep () {
Retourner [lsquototalrsquo, lsquoconversionsrsquo]
}
Fonction publique wakeup () {
$this gt SET _ Conversion Rate ()
}
* *
Parameter string $Property
Valeur entière du paramètre
*
Ensemble commun de fonctions ($attribut, $valeur) {
(0) $ Propriété = (int) $valeur
$this gt SET _ Conversion Rate ()
}
}
Fonction protégée set _ Conversion Rate () {
(0! = $this gt total)
$Ben gt Taux de conversion = $Ben gt Taux de conversion $Ben gt total
Autres {
$this gt conversion rate = 0
}
}
} cette classe utilise la méthode magique sleep () pour dire à PHP de ne sérialiser que toutes les propriétés et transformations. Cela ne raccourcit pas considérablement la longueur de la chaîne sérialisée, mais pouvez économiser beaucoup drsquoespace dans la base de données si avez beaucoup de ces objets à enregistrer, ou si avez besoin drsquoopérations mathématiques supplémentaires. Bien que nrsquoutilisiez pas la méthode magique, il y a un moyen drsquoobtenir une fonctionnalité similaire à celle fournie par sleep () pour la sérialisation lors de la conversion drsquoun objet en json. une classe implémente lrsquointerface jsonserializable, elle peut avoir une méthode appelée jsonserializable () qui définit comment les objets sont convertis en json au moment de la transmission
Ou la fonction json _ encode (). Voici une nouvelle classe qui étend la classe précédente et peut être utilisée pour créer une chaîne json contenant les trois attributs. Set _ Conversion Rate ()
Retour
« total» = gt $this gt total,
« conversion» = gt $this gt conversion,
« taux de conversion» = gt $ceci gt Taux de conversion
G)
}
Jrsquoespère que cet article montre comment utiliser les méthodes magiques que jrsquoai décrites ou comment mieux les utiliser. De plus, jrsquoespère que cela aidera à comprendre drsquoautres façons. Par exemple, avez maintenant appris à autoriser lrsquoaccès à get () et set () pour les variables qui nrsquoexistent pas, privées ou protégées, ainsi qursquoà Call () et callstatic () pour les variables qui nrsquoexistent pas, privées ou protégées. Jetez un coup drsquooeil à toutes les méthodes magiques énumérées dans le Manuel PHP et voyez quelles autres méthodes sont utiles pour . Mais rappelez aussi que les méthodes magiques permettent de faire des choses intelligentes, mais cela ne signifie pas que devriez les utiliser. Nrsquoimporte quel sorcier de haut niveau dira que trop de magie, aussi bonne soit elle, est dangereuse et doit avoir des conséquences indésirables.

Laisser un commentaire

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

ContactPress Supported By WordPress Plugins