Comment utiliser la Programmation Orientée Objet (POO) avec WordPress<span class="wtr-time-wrap after-title"><span class="wtr-time-number">10</span> min read</span>
Schéma héritage de la programmation orientée objet

Comment utiliser la Programmation Orientée Objet (POO) avec WordPress10 min read

La programmation orientée objet (POO) est un incontournable car elle est partout. Certains langages se basent même à 100% dessus, comme par exemple Java. C’est donc une des premières choses que l’on se doit d’apprendre lorsque l’on aborde la programmation avancée.

Il se peut que le principe de POO vous semble obscur, car il est relativement complexe à appréhender, mais il est très utile à mettre en place, surtout sur WordPress. Dans cet article nous allons justement nous pencher sur les bases du POO sur wordpress. Si vous débutez sur la notion de POO, je vous invite tout d’abord à lire cet article qui est une introduction à la programmation orientée objet.

Dans le présent tutoriel je pars en effet du principe que vous êtes familiers avec les principes de base tel que les objets ou l’héritage, si ce n’est pas le cas, lisez mon article.

Pourquoi utiliser la POO avec WordPress ?

Avant de comprendre comment, il faut étudier le pourquoi l’utiliser. Le développement de plugins WordPress n’est pas réellement compliqué. Il faut connaître les fonctions et leur utilité, mais si on comprends bien tout ces concepts tout se passe sans problèmes.

Néanmoins on peut rencontrer assez rapidement une difficulté, celle de la structuration du code et l’utilisation des fonctions. Le plus désagréable selon moi étant la nécessité de donner un préfixe spécifique à chaque fonction que vous créez. C’est très énervant, surtout si vous en avez des centaines. Mais, surtout, si vous commettez une seule erreur, vous risquez de réécrire une fonction native ou venant d’un autre plugin et cette manipulation pourrait causer de gros dégâts.

C’est donc lourd et même parfois dangereux d’utiliser la programmation fonctionnelle basique. Pour pallier à ça, on peut utiliser les namespace, ce qui réduit considérablement la complexité de nommage. Mais cette méthode présente le désavantage d’ajoute de la complexité dans le code, donc on n’y gagne pas réellement.

Quels problèmes la programmation orientée objet résout ?

Globalement elle résout tout les problèmes cités plus haut, et même plus.

Déjà, plus de problèmes de nommage de fonctions ! Les atrocités du genre “nomdemonplugin_maFonction” n’existent plus, et, croyez moi, ça fait du bien !

Ensuite, la POO permet de mieux structurer le code car chaque classe a une fonction précise. Pour vous donner un exemple, dans le plugin que je suis en train de créer, j’utilise une classe pour chaque CPT, ainsi que pour chaque fonctionnalité clé.

Par exemple, j’ai une classe qui gère mes requêtes AJAX, une autre qui gère l’admin_post et encore une autre gérant certaines requêtes SQL.

Globalement, la POO permet donc d’avoir un code bien arrangé où tout est clair. Vos fonctions ne se baladent pas de manière archaïque.

En plus de cela, il est bien plus facile de gérer des variables et des états. Grâce à l’encapsulation notamment, il devient extrêmement facile de conserver l’état du variable tout au long de l’exécution de la requête sans avoir à la stocker dans une globale et sans avoir à lui donner un nom bizarre. Il suffit de la stocker dans une classe.

Enfin, il devient plus facile de stocker votre code dans plusieurs fichiers. Il suffit d’importer une classe et de l’instancier. C’est bien plus simple que de devoir exécuter chaque fonction. Ici vous n’avez qu’un require et une ligne de code
à faire pour instancier et lancer la classe.

Bien, vous savez maintenant pourquoi la POO est utile, voyons comment la mettre en place ainsi que quelques unes de mes conventions personnelles permettant d’avoir un code efficace et bien structuré.

Mettre en place la Programmation Orientée Objet sur WordPress

Je tiens à préciser que l’on utilisera pas “autoload” ou même “composer” dans ce tutoriel. Il est très facile d’implémenter ces systèmes à ce projet si vous le désirez, il suffira de remplacer les “require_once” par l'”autoload”.

La première chose à faire est de créer la classe représentant votre plugin. Bien évidemment celle-ci est un singleton c’est à dire qu’il n’existera qu’une seule instance de la classe dans votre plugin. On pourrai aussi la faire statique mais c’est beaucoup de travail en plus pour aucune réelle plus-valu.

class MonPlugin{
    public function __construct()
    {
        
    }
    
    public function register()
    {
        
    }
}


if (class_exists('MonPlugin'))
{
    $mon_plugin = new MonPlugin;
    $mon_plugin->register();
}

Ici j’ai crée deux fonctions, je le fais à chaque fois que j’utilise une nouvelle classe. Le ” __construct” permets d’instancier des variables et le “register()” va être le point d’entrée de notre plugin.

Vous pouvez voir que j’utilise “class_exists”. Cette fonction renvoi “true” si la classe existe, c’est une simple vérification afin d’éviter les bugs potentiels.

Pour continuer dans notre lancée, nous allons créer une class gérant les page d’administration, nous l’appellerons ‘MonPluginAdminPage.php’

D’abord, dans votre fichier principal, écrivez ce code avant la déclaration de notre classe principale :

require_once plugin_dir_path(__FILe__).'aajo';

Ce code a pour effet d’inclure notre nouvelle classe à notre fichier principal.

Toujours dans ce dernier, ajoutons quelques lignes de code :

class MonPlugin{
    public $admin_page;
    public function __construct()
    {
        $this->admin_page = new MonPluginAdminPage();
    }

    public function register()
    {
        $this->admin_page->register();
    }
}

Ce code va créer une nouvelle variable dans notre classe principale et va stocker une instance de notre nouvelle classe ‘MonPluginAdminPage’ dans cette variable.

Ensuite la fonction “register” exécute la fonction “register” de notre nouvelle classe.

Voici enfin le contenu de notre nouvelle class ‘MonPluginAdminPage’ :

class MonPluginAdminPage
{
    public function register()
    {
        add_action('admin_menu', [$this, 'adminPages']);
    }

    public function adminPages()
    {
        add_menu_page('Ma Page de Menu', 'Ma Page de Menu', 'manage_options', 'mon-slug-unique', [$this, 'maCallback']);
    }

    public function maCallback()
    {
        ?>
        <p>Voici notre page d'administration qui est gérée dans une classe à part</p>
        <?php
    }

}

Ici le code est simple à comprendre, néanmoins il y a une petite chose à bien appréhender. Dans le cadre de la POO, lorsque l’on doit donner un “callback”, on donne un “array avec en premier l’instance de notre classe, en l’occurence “$this”, et la seconde valeur est le nom de notre fonction contenue dans l’instance de la classe.

Dans le cas présent, wordpress va rechercher les fonctions par leur nom, en sachant qu’elles se trouvent dans notre classe.

Ce petit code simple nous permets d’obtenir ce résultat :

Les conventions en programmation orientée objet

Ce code semble très lourd, on pourrait penser que l’on fait beaucoup de choses pour peu de résultats, mais sachez que ce n’est qu’une impression.

La première chose à comprendre c’est qu’en quelques lignes de code on peut passer d’une classe qui affiche une seule page d’administration à une classe qui en affiche autant que l’on en lui donne. Pour ce faire, il suffit de faire une boucle “foreach” et de créer un “array” dans l’instance de la classe qui stockera les pages, je vous laisse chercher c’est très facile à faire.

Utiliser une approche POO permet d’automatiser bon nombre de tâches nécessitant normalement d’être écrites plusieurs fois. Par exemple, on peux créer une classe gérant les requêtes de base de donnée pour une certaine structure et, grâce a cela, il devient simple de faire ses requêtes.

La fonction “register”

On a vu que j’utilisai une fonction un peu spéciale appelée “register()”. Et bien c’est le point d’entrée de notre classe. Libre à vous de l’appeler comme vous le désirez mais l’idée elle est toujours la même.

La classe va effectuer toutes ses actions à partir de “register”. C’est la fonction chargée d’appeler les autres fonctions et de mettre en place les “hook”. Grâce à cette approche, nous n’avons qu’à appeler une seule fonction dans notre classe principale pour que toute la classe des pages d’administration fonctionne parfaitement 🙂

Est-ce que vous devriez mettre en place la POO ?

La questions est moins évidente qu’elle n’y parait. La programmation orientée objet WordPress n’est pas la solution miracle qui rendra tout vos programmes super qualitatifs.

De plus, il existe d’autres paradigmes gagnant en popularité comme la programmation fonctionnelle qui est tout aussi viable bien que, selon moi, plus difficile à utiliser.

Si vous avez un petit projet de plugin, la POO n’est probablement pas utile. Pour ma part j’ai crée des petits plugins avec elle et, si je prends du recul, je me rends compte que j’aurais pu faire la même chose sans.

Par contre quand il s’agit de grands programmes, la POO est une bonne approche. Elles permet un code structuré et isolé qui limite les bugs potentiels et favorise l’automatisation.

Conclusion

La programmation orientée objet dans WordPress n’est pas la solution miracle qui va changer votre vie de programmeur. Ce n’est pas non plus quelque chose d’obligatoire qu’un programmeur confirmé se doit d’utiliser à toutes les sauces.

Mais cette approche possède néanmoins énormément d’avantages et par expérience personnelle je peux vous dire que c’est la manière que je préfère pour créer des gros plugins.

La POO permets de réduire considérablement le nombre d’appel de fonctions dans votre fichier principal. Tout se fait via les fonctions “register()”. Ce processus permet d’automatiser la création de classe et de moins réfléchir sur la structure de votre code. C’est conçu pour se vider l’esprit et se concentrer sur la partie importante.

Si vous êtes suffisamment bon en PHP, je ne peux que vous recommander d’essayer la programmation orientée objet, ça ne vous conviendra peut être pas, mais il y a de fortes chances que cela change votre façon de travailler, et en bien !

J’espère que cet article vous aura aidé à y voir plus clair.

Si cet article vous as plu, vous pouvez vous abonner à ma newsletter pour recevoir le guide GRATUIT Ultime pour bien débuter la programmation

Vous abonner à notre newsletter

* champ requis



Bonne journée et merci d’avoir lu cet article !

Laisser un commentaire

Fermer le menu
×
×

Panier