Quelles méthodes de magie PHP les développeurs de WordPress doivent savoir
Si vous avez vérifié le Code PHP, vous avez probablement rencontré une méthode magique: Vous pouvez dire que c’est une méthode magique parce qu’elle est précédée de deux caractères soulignés. Si vous n’utilisez pas ces outils, vous devriez le faire. Une méthode magique est une fonction qui vous permet de montrer à un objet comment réagir lorsque quelque chose arrive à l’objet. Vous pouvez définir comment les objets réagissent à un événement. C’est un énorme outil pour prévenir les erreurs et réduire le Code redondant. Dans cet article, je vais vous montrer quelques – unes des méthodes magiques que PHP offre. J’ai choisi ces méthodes parce qu’elles sont plus utiles pour vous et vous aident à comprendre comment elles fonctionnent.
La méthode magique la plus courante pour construire ce qu’il fait est Construct (). Cette fonction est appelée immédiatement après l’Instanciation de la classe. Il a différentes utilisations. Le premier but est d’injecter des données dans une classe. Par exemple, lorsque nous créons une instance d’une classe WP _ query, nous passons habituellement un tableau de paramètres directement à elle: $args = [‘post type = >’ hiroy ‘] $ Query = new WP _ Query ($args); Lorsque nous passons les paramètres de la classe à l’Instanciation, ils sont passés à son constructeur. Cela nous permet d’avoir une classe qui génère différents objets.
La deuxième utilisation est de déclencher une séquence d’événements qui doit se produire avant que l’objet ne soit disponible. Par exemple, supposons que vous 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 qu’il soit prêt au besoin, ou pour déclencher une erreur plus tard. Ceci est utile lorsque vous 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. C’est peut – être une mauvaise idée parce que le crochet qui appelle l’objet 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 l’objet. Une autre approche consiste à garder tous les crochets dans une classe spécifique ou une classe de configuration qui n’a pas besoin d’instancier deux fois pour des raisons fonctionnelles, ou à mettre en œuvre un modèle d’instance unique pour s’assurer qu’ils ne sont instanciés qu’une seule fois.
Une autre option est d’utiliser les fonctions \
}
}
Fonction protégée add _ Hooks () {
Ajouter un crochet
Do _ action (‘init stuff’);
}
Cette solution est réalisable, mais je pense que lorsqu’elle fonctionne, elle montre qu’une classe viole le principe de la responsabilité individuelle. En général, je pense que les méthodes communes pour toutes les classes d’une 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 – > 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» = > Array
Après’ = > $avant,
\
\
()
« trier par» = > « nombre de commentaires»,
« séquence» = > « Description»,
‘posts _ per page’ = > ‘5’,
\
);
$this – > 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 qu’il est logique de ne l’invoquer qu’une 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. D’accord, mais si je ne peux pas faire quelque chose avec cet objet, cet objet est inutile. C’est pourquoi nous avons la méthode getter get _ Query (), qui ne renvoie que la propriété $query. L’utilisation de get et set pour getter et Setter est une convention, mais non obligatoire. Php fournit un getter magique qui, s’il existe, est appelé lorsque vous accédez aux propriétés en dehors de la portée de l’objet. Vous pouvez utiliser la méthode magique get () pour exposer une partie ou la totalité des méthodes protégées et privées d’une classe.
Magic get () passe le nom de l’attribut. Cela vous permet de retourner des propriétés spécifiques ou d’autres contenus. De plus, vous voudrez peut – être appeler Setter en utilisant get (). La méthode magique set () passe le nom de l’attribut à définir et sa valeur. Il peut être utilisé pour créer n’importe 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 l’écriture à partir de l’exté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 à l’extérieur de l’objet, mais assurez – vous que le type reste le même.
Voici une classe qui utilise n’importe quelle requête wp \ u via la section fournie. Résoudre le problème que les propriétés publiques peuvent changer de type. Si vous changez la propriété $QUERY en un tableau ou un objet d’une classe autre que Wp _ query, cette classe génère une erreur. Partial _ partial = $partial partial;
}
Ensemble commun de fonctions ($attribut, $valeur) {
Si (‘Query’ = $Property & & (IS _ A ($value, ‘WP Query’) {
$this – > Query = $Value;
}
}
Fonctions publiques get ($property) {
If (‘Query’ = $property) {
Renvoie $this – > Query;
}
}
Output _ Loop () {fonctions publiques
$QUERY = $this – > Query;
Ob _ Start ();
Foreach ($QUERY – > publish as $publish) {
$post = Setup _ postdata ($post);
Inclure $this – > partial _ partial;
}
Retourner Ob _ get Clean ();
}
}
Notez que l’utilisation de ces types de get () et set () ne les rend pas plus compacts que l’utilisation de getters et Setters explicites. Cela réduit également l’utilité des documents en ligne. Cela montre la faiblesse de l’utilisation des méthodes Magic get et set.
En théorie, vous pouvez créer une classe qui vous 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 l’attribut $this – > $;
}
}
\/ * *
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 – > $property = $Value;
}
}
Les getters et Setters magiques primitifs sont utiles lorsqu’une classe a beaucoup d’attributs, 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}. Si elle n’est 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) {
Si (property _ exists ($this, $property) {
Si (! Isset ($this – > $property) & & Method _ existe ($this, ‘Set property)) {
Call _ user func ([$this, ‘Set property]);
}
Renvoie l’attribut $this – > $;
}
}
} \
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 d’économiser de l’espace dans la base de données et d’accélérer les requêtes. Par exemple, considérez une classe qui crée des objets pour le taux de conversion d’une 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 – > total = $total;
}
\/ * *
Renvoie le nombre de points flottants | int
* \/
Get _ Conversion Rate () {fonctions publiques
Retourner $this – > conversion _ rate;
}
Fonction commune sleep () {
Retourner [‘total’, ‘conversions’];
}
Fonction publique wakeup () {
$this – > SET _ Conversion Rate ();
}
\/ * *
Parameter string $Property
Valeur entière du paramètre
* \/
Ensemble commun de fonctions ($attribut, $valeur) {
Si (0) $ Propriété = (int) $valeur;
$this – > SET _ Conversion Rate ();
}
}
Fonction protégée set _ Conversion Rate () {
Si (0! = $this – > total)
$Ben – > Taux de conversion = $Ben – > Taux de conversion \/ $Ben – > total;
Autres {
$this – > 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 vous pouvez économiser beaucoup d’espace dans la base de données si vous avez beaucoup de ces objets à enregistrer, ou si vous avez besoin d’opérations mathématiques supplémentaires. Bien que vous n’utilisiez pas la méthode magique, il y a un moyen d’obtenir une fonctionnalité similaire à celle fournie par sleep () pour la sérialisation lors de la conversion d’un objet en json. Si une classe implémente l’interface 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» = > $this – > total,
« conversion» = > $this – > conversion,
« taux de conversion» = > $ceci – > Taux de conversion
G);
}
J’espère que cet article vous montre comment utiliser les méthodes magiques que j’ai décrites ou comment mieux les utiliser. De plus, j’espère que cela vous aidera à comprendre d’autres façons. Par exemple, vous avez maintenant appris à autoriser l’accès à get () et set () pour les variables qui n’existent pas, privées ou protégées, ainsi qu’à Call () et callstatic () pour les variables qui n’existent pas, privées ou protégées. Jetez un coup d’oeil à toutes les méthodes magiques énumérées dans le Manuel PHP et voyez quelles autres méthodes sont utiles pour vous. Mais rappelez – vous aussi que les méthodes magiques vous permettent de faire des choses intelligentes, mais cela ne signifie pas que vous devriez les utiliser. N’importe quel sorcier de haut niveau vous dira que trop de magie, aussi bonne soit – elle, est dangereuse et doit avoir des conséquences indésirables.