Examen du Code partie 2: amélioration de la lisibilité et des performances de la classe filterwpquery
On peut arranger ça? Nous pouvons déplacer le contrôle nul dans la méthode. Vérifions – le étape par étape. Étape 1: déplacer un contrôle nul la première étape consiste à repositionner le contrôle nul de la méthode Callback () et à l’insérer dans la méthode shouldfilter (). Il est facile de couper et coller d’une méthode à l’autre.
Mais attendez, le contrôle nul dépend de l’entrée donnée. Cela signifie que nous déclinons $postsornull comme paramètre de méthode. Fonction statique publique shouldfilter ($postsornull): bool
{Y}
Valider la demande de repos.
Si (! Did _ action (‘rest API init’) {
Renvoie False;
}
Le contrôle est vide.
Si (! Is _ null ($postsornull)) {
Renvoie False;
}
Renvoie True;
Étape 2: Retournez l’ordre des masques pour améliorer les performances laissez – moi vous poser une question. Que se passe – t – il si la méthode reçoit du contenu non nul? Regarde le Code. Que se passe – t – il?
Oui, il est retourné au faux dos et a fini son travail. Mais regardez le processus de contrôle. Tout d’abord, vous devez vérifier la demande de repos. Pensez à l’ordre des pions. Devrions – nous vérifier les demandes de repos avant de vérifier ce qui a été reçu? La réponse à cette question dépend de la complexité du Code. Dans ce cas, il est plus efficace (plus rapide) d’inverser la séquence et d’effectuer d’abord une vérification nulle. Pourquoi? Regarde le Code. La fonction PHP is _ NULL est très rapide, tandis que la fonction WordPress did action () a plus de code à traiter.
L’inversion de l’ordre nous permet d’effectuer d’abord les contrôles les plus rapides. Par conséquent, en cas d’échec, le Code est sauvegardé plus rapidement et retourné plus rapidement. Fonction statique publique shouldfilter ($postsornull): bool
{Y}
Le contrôle est vide.
Si (! Is _ null ($postsornull)) {
Renvoie False;
}
Valider la demande de repos.
Si (! Did _ action (‘rest API init’) {
Renvoie False;
}
Renvoie True;
Étape 3: extraire le vérificateur de repos
Afin d’améliorer la lisibilité, le Contrôleur rest demande maintenant un commentaire en ligne pour nous permettre de comprendre rapidement son intention (c. – à – D. ce qu’il fait). Enlevons ce commentaire et je vais vous poser une question.
Si (did action (‘rest API init’) {} Vous comprenez rapidement l’intention de cette vérification? Non, je ne peux pas. Vous êtes d’accord? Donc nous devons refaire ce code et le dire. Conseil de code: Faites – nous savoir. Rendre lisible. J’aimerais m’arrêter ici pour partager des conseils sur le Code avec vous. Le code doit être expressif et très lisible. Tu aurais dû nous dire ce qui s’est passé pour qu’on puisse finir le travail rapidement. C’est généralement un indice lorsque le Code a besoin d’un commentaire. Savez – vous si vous devez le refaire en lisant le Code sans commentaires et en vous demandant: « puis – je comprendre rapidement ce qui se passe? » Si votre réponse est non, c’est un remaniement.
\
{Y}
Si (! Is _ null ($postsornull)) {
Renvoie False;
}
Si (! Static:: doingrest ()) {
Renvoie False;
}
Renvoie True;
}
\/ * *
* vérifiez si WordPress exécute une requête rest.
* *
Renvoie booléen
* \/
Fonction statique privée do rest (): bool
{Y}
Retourner did _ action (‘rest API init’);
Notez que le nom de la méthode décrit le comportement de ce validateur. Nous n’avons plus besoin de commentaires en ligne. Lorsque vous retournez ce code la semaine prochaine ou l’année prochaine, il vous enverra son m
Getposts () est assigné à la variable avant de retourner à l’événement filtre. Pourquoi? Il n’est utilisé nulle part. Ce code est un exemple d’allocation inutile. Ici, nous pouvons simplement retourner tout ce que getposts () retourne. Rappel public de la fonction statique ($postsornull)
{Y}
Si (! Static:: shouldfilter ($postsornull)) {
Retourner $postsornull;
}
Retourner statique:: getposts ();
Ce remaniement est préférable parce que: moins de code est lu et maintenu. Il fonctionne mieux (plus rapidement) parce que PHP n’a pas besoin de créer des variables dans sa table de symboles. Il n’est pas nécessaire d’associer cette variable à l’emplacement mémoire du tableau. Évitez la recherche de variables avant de revenir en arrière. Php n’a besoin que d’une seule ligne de code. En lisant le livre PHP Internals, vous pouvez en savoir plus sur la façon dont PHP gère sa mémoire. Cet appel est trop général. Laissez – nous vous dire ce qu’il fait. J’ai remarqué très tôt à quel point il était important que le Code nous dise ce qui s’est passé. Cela commence par la façon dont nous appelons les fonctions et les méthodes. Ce sont nos ouvriers. Ils font des choses. Ils devraient donc commencer par les verbes, puis décrire et exprimer leur comportement. \
Rdcoded. Pourquoi? Restez avec moi pendant que je vous explique le processus de pensée. Cette classe a des attributs qui contiennent des valeurs de priorité. Il y a un moyen d’obtenir cette propriété. Supposons que vous vouliez le changer de 10 à 99. Pour faire ce changement, vous devez vous rappeler combien de places dans la classe avez – vous changé? 3. Si vous oubliez de changer, que se passe – t – il? Il peut y avoir une erreur. En utilisant le principe Dry, nous essayons d’éliminer le Code redondant. L’une des raisons est d’éliminer le problème que je viens d’expliquer. Comment résoudre ce problème? Cette propriété peut être utilisée lors de l’ajout ou de la suppression d’un crochet de filtre: \/ * * * @ inheritdoc
Fonction statique commune addfilter (): bool
{Y}
Renvoie add filter (‘posts pre Query’, [filterwpquery:: class, ‘filterprequery’], Static: $filterpriority);
}
Hériter du document
Fonction publique statique removefilter (): bool
{Y}
Retourner supprimer u filter (‘posts _ pre Query’, [filterwpquery:: class, ‘filterprequery’, Static: $filterpriority);
Rappelons que j’ai beaucoup parlé dans cet article. Ensemble, nous avons examiné le processus d’examen du Code pour améliorer la classe filterwpquery. Bien que cette classe soit petite, certaines améliorations ont été apportées à la qualité du Code. Regardons ce que nous faisons pour améliorer la lisibilité et la performance: <?php
spazio dei nomi CalderaLearn\RestSearch;
/**
* Filtro classeWPQuery
*
* Modifica l'oggetto WP_Query durante le richieste API REST
*
* @pacchetto CalderaLearn\RestSearch
*/
la classe FilterWPQuery implementa FiltersPreWPQuery
{
/**
* Priorità per il filtro
*
* @var int
*/
statico protetto $filterPriority = 10;
/**
* Dimostra come utilizzare un modo diverso per impostare i post restituiti da WP_Query
*
* @uses "posts_pre_query"
*
* @param $postsOrNull
* @return \WP_Post[]
*/
callback di funzione statica pubblica ($postsOrNull)
{
//Eseguito solo durante le richieste API di WordPress
if (static::shouldFilter()) {
//Previeni le ricorsioni
//Non eseguire se i messaggi sono già stati inviati
if (is_null($postsOrNull)) {
//Ottieni dati fittizi
$postsOrNull = static::getPosts();
}
}
// Restituisce sempre qualcosa, anche se è invariato
return $postsOrNull;
}
/** @inheritdoc */
funzione statica pubblica shouldFilter() :bool
{
return did_action('rest_api_init');
}
/** @inheritdoc */
funzione statica pubblica addFilter() : bool
{
return add_filter('posts_pre_query', [FilterWPQuery::class, 'callback'], 10);
}
/** @inheritdoc */
funzione pubblica statica removeFilter() : bool
{
return remove_filter('posts_pre_query', [FilterWPQuery::class, 'callback'], 10);
}
/** @inheritdoc */
funzione statica pubblica getFilterPriority() : int
{
return static::$filterPriority;
}
/** @inheritdoc */
funzione statica pubblica getPosts() : array
{
//Crea 4 post fittizi con titoli diversi
$mockPosts = [];
for ($i = 0; $i Amélioration de la lisibilité
♪ | ♪ | |
♪ | ||
♪ | ||
♪ | ♪ | |
♪ | ♪ | |
♪ |