La programmation orientée objet (POO), un paradigme important dans le domaine des logiciels, est centrée sur les « objets » – des instances de classes qui comprennent des données et des comportements au lieu d’« actions »

PHP, connu pour ses scripts côté serveur, bénéficie grandement de la POO. En effet, la POO favorise la modularité et la réutilisation du code, ce qui en facilite la maintenance. En retour, cela facilite l’organisation et l’évolutivité des grands projets.

La maîtrise de la POO est importante pour les développeurs qui travaillent avec des thèmes WordPress, des extensions et des solutions personnalisées. Dans cet article, nous allons décrire ce qu’est la POO en PHP et l’impact qu’elle a sur le développement de WordPress. Nous vous expliquerons également comment mettre en œuvre les principes de la POO en PHP.

Pré-requis

Pour suivre les parties pratiques de cet article, assurez-vous d’avoir :

Avantages de la POO dans le développement PHP

La POO stimule considérablement le développement de PHP en améliorant la modularité, la réutilisation, l’évolutivité, la maintenabilité et le travail d’équipe. Elle organise le code PHP en le divisant en objets, chacun représentant une partie spécifique de l’application. Grâce aux objets, vous pouvez facilement réutiliser le code, ce qui permet de gagner du temps et de réduire les erreurs.

En gardant cela à l’esprit, nous allons nous pencher sur deux avantages spécifiques de la POO en PHP, en soulignant comment elle transforme le processus de développement.

1. Réutilisation et maintenance du code

La POO en PHP facilite la réutilisation du code grâce à l’héritage et au polymorphisme. Les classes peuvent utiliser les propriétés et les méthodes d’autres classes. Cela vous permet d’utiliser un ancien code d’une nouvelle manière avec peu de changements.

La POO facilite également l’entretien de votre code. L’encapsulation signifie que les objets gardent leurs détails privés et ne partagent que ce qui est nécessaire, en utilisant des méthodes spéciales appelées « getters » et «  setters ». Cette approche permet d’éviter que des changements dans une partie de votre application n’entrainent des problèmes dans d’autres, ce qui simplifie la mise à jour et la maintenance du code.

En outre, comme les objets sont autonomes, il est plus facile de trouver et de corriger les bogues dans certaines parties du système. La qualité et la fiabilité globales du code s’en trouvent améliorées.

2. Clarté et structure améliorées

La POO rend le code PHP plus propre et mieux organisé grâce aux classes et aux objets. Les classes agissent comme des modèles pour les objets, en gardant tout ce qui doit l’être au même endroit.

La POO permet également aux classes d’utiliser les fonctionnalités d’autres classes, ce qui signifie que vous n’avez pas besoin d’écrire le même code à plusieurs reprises. Tous ces éléments contribuent à rendre le code plus propre, plus facile à corriger et mieux organisé.

Un code clair issu de la POO permet aux équipes de mieux travailler ensemble. Il est plus facile pour chacun de comprendre ce que fait le code, ce qui signifie que vous passez moins de temps à expliquer les choses et plus de temps à faire le travail. Les erreurs sont également réduites, ce qui permet au projet de rester sur la bonne voie. Et lorsque le code est clair et ordonné, les nouveaux membres de l’équipe peuvent rapidement rattraper leur retard.

Mise en œuvre de la POO en PHP

En PHP, la POO organise le code avec des classes et des objets, comme des plans et des maisons. Vous créez des classes pour chaque objet (comme les utilisateurs ou les livres), y compris leurs caractéristiques et leurs actions. Ensuite, vous utilisez l’héritage pour créer de nouvelles classes à partir des classes existantes, ce qui vous permet de gagner du temps en évitant de répéter le code. Et comme l’encapsulation permet de garder certaines parties de la classe privées, votre code est plus sûr.

Les sections suivantes vous expliquent comment utiliser efficacement les principes de la POO dans votre programmation PHP. Nous créons un système de gestion de contenu (CMS) pour gérer les articles.

1. Définir une classe avec des propriétés et des méthodes

Commencez par une classe Article qui comprend les propriétés title, content et status, ainsi que les méthodes permettant de définir et d’afficher ces propriétés.

class Article {
    private $title;
    private $content;
    private $status;

    const STATUS_PUBLISHED = 'published';
    const STATUS_DRAFT = 'draft';

    public function __construct($title, $content) {
        $this->title = $title;
        $this->content = $content;
        $this->status = self::STATUS_DRAFT;
    }

    public function setTitle($title) {
        $this->title = $title;
        return $this;
    }

    public function setContent($content) {
        $this->content = $content;
        return $this;
    }

    public function setStatus($status) {
        $this->status = $status;
        return $this;
    }

    public function display() {
        echo "<h2>{$this->title}</h2><p>{$this->content}</p><strong>Status: {$this->status}</strong>";
    }
}

2. Créez des objets et mettez en œuvre le chainage de méthodes

Créez un objet article et utilisez le chainage de méthodes pour définir ses propriétés :

$article = new Article("OOP in PHP", "Object-Oriented Programming concepts.");
$article->setTitle("Advanced OOP in PHP")->setContent("Exploring advanced concepts in OOP.")->setStatus(Article::STATUS_PUBLISHED)->display();

3. Renforcez l’encapsulation et l’héritage

Améliorez l’encapsulation en utilisant des méthodes getter et setter et créez une classe FeaturedArticle qui hérite de Article:

class FeaturedArticle extends Article {
    private $highlightColor = '#FFFF00'; // Default highlight color

    public function setHighlightColor($color) {
        $this->highlightColor = $color;
        return $this;
    }

    public function display() {
        echo "<div> style='background-color: {$this->highlightColor};'>";
        parent::display();
        echo "</div>";
    }
}

$featuredArticle = new FeaturedArticle("Featured Article", "This is a featured article.");
$featuredArticle->setStatus(FeaturedArticle::STATUS_PUBLISHED)->setHighlightColor('#FFA07A')->display();

4. Interfaces et polymorphisme

Définissez une interface pour le contenu publiable et implémentez-la dans la classe Article pour démontrer le polymorphisme :

interface Publishable {
    public function publish();
}

class Article implements Publishable {
    // Existing class code...

    public function publish() {
        $this->setStatus(self::STATUS_PUBLISHED);
        echo "Article '{$this->title}' published.";
    }
}

function publishContent(Publishable $content) {
    $content->publish();
}

publishContent($article);

5. Utilisez les traits pour un comportement partagé

PHP vous permet d’utiliser des traits pour ajouter des fonctions aux classes sans avoir besoin d’hériter d’une autre classe. En utilisant le code ci-dessous, introduisez un trait pour l’enregistrement des activités au sein du CMS :

trait Logger {
    public function log($message) {
        // Log message to a file or database
        echo "Log: $message";
    }
}

class Article {
    use Logger;

    // Existing class code...

    public function publish() {
        $this->setStatus(self::STATUS_PUBLISHED);
        $this->log("Article '{$this->title}' published.");
    }
}

La POO dans le développement de WordPress

Les principes de la POO améliorent considérablement le développement de WordPress, en particulier lors de la création de thèmes, d’extensions et de widgets. Avec l’aide de la POO, vous pouvez écrire un code plus propre, plus évolutif et plus facile à maintenir pour vos sites WordPress.

Cette section explique comment appliquer la POO au développement de WordPress. Nous fournirons des exemples que vous pourrez copier et coller dans un déploiement WordPress pour le tester.

La POO dans les thèmes WordPress : Enregistrement d’un type de publication personnalisé

Pour démontrer l’utilisation de la POO dans les thèmes WordPress, vous créez une classe qui gère l’enregistrement d’un type de publication personnalisé.

Placez le code suivant dans le fichier functions.php de votre thème. Vous trouverez vos thèmes dans le répertoire wp-content/themes.

class CustomPostTypeRegistrar {
    private $postType;
    private $args;

    public function __construct($postType, $args = []) {
        $this->postType = $postType;
        $this->args = $args;
        add_action('init', array($this, 'registerPostType'));
    }

    public function registerPostType() {
        register_post_type($this->postType, $this->args);
    }
}

// Usage
$bookArgs = [
    'public' => true,
    'label'  => 'Books',
    'supports' => ['title', 'editor', 'thumbnail'],
    'has_archive' => true,
];
new CustomPostTypeRegistrar('book', $bookArgs);

Ce code enregistre dynamiquement un type d’article personnalisé book dont les détails sont transmis à l’aide du tableau bookArgs. Vous pouvez voir le type de publication personnalisé nouvellement créé dans la colonne latérale de l’administration de WordPress, intitulé B0oks.

L'élément de la colonne latérale du type de publication personnalisé Books et l'élément Ajouter un nouvel article.
L’élément de la colonne latérale du type de publication personnalisé Books et l’élément Ajouter un nouvel article.

Cet exemple illustre comment la POO peut encapsuler la fonctionnalité d’enregistrement des types d’articles personnalisés, en la rendant réutilisable pour différents types d’articles.

La POO dans les plugins WordPress : Gestionnaire de codes courts

Pour un exemple d’extension, vous développez une classe qui gère un code court pour afficher un message spécial. Vous pouvez tester cette fonctionnalité en ajoutant le code court ci-dessous à n’importe quel article ou page.

<?php
/**
* Plugin Name: OOP Shortcode Handler
* Description: Handles a custom shortcode with OOP.
* Version: 1.0
* Author: Name
*/

class OOPShortcodeHandler {
    public function __construct() {
        add_shortcode('oop_message', array($this, 'displayCustomMessage'));
    }

    public function displayCustomMessage($atts) {
        $attributes = shortcode_atts(['message' => 'Hello, this is your OOP     
message!'], $atts);
        return "<div>{$attributes['message']}</div>";
    }
}

new OOPShortcodeHandler();

Enregistrez cette classe sous le nom my-oop-shortcode-handler.php dans le répertoire wp-content/plugins. Enfin, activez l’extension.

Le My OOP Shortcode Handler est listé sur la page des extensions.
Le My OOP Shortcode Handler est listé sur la page des extensions.

Ensuite, dans l’éditeur de page ou d’article avant la publication ou la mise à jour, utilisez les codes courts[oop_message] et [oop_message message="Custom Message Here"], comme indiqué ci-dessous :

La page d'exemple en mode édition avec le message du code court personnalisé ajouté.
La page d’exemple en mode édition avec le message du code court personnalisé ajouté.

Après la publication ou la mise à jour de la page ou de l’article, vous voyez le message que les codes courts affichés dénotent.

La page d'exemple publiée avec le message du code court personnalisé affiché.
La page d’exemple publiée avec le message du code court personnalisé affiché.

La POO dans les widgets WordPress : widget de contenu dynamique

La POO est également bénéfique pour les widgets en encapsulant leurs fonctionnalités dans des classes. Le noyau de WordPress lui-même utilise la POO pour les widgets. Ici, vous créez un widget personnalisé qui permet aux utilisateurs d’afficher un contenu dynamique avec un titre et une zone de texte.

Ajoutez le code suivant au fichier functions.php de votre thème ou dans un plugin. Il définit un widget personnalisé qui affiche le message « Hello World From My Custom Widget ! »

class My_Custom_Widget extends WP_Widget {

    public function __construct() {
        parent::__construct(
            'my_custom_widget', // Base ID
            'My Custom Widget', // Name
            array('description' => __('A simple custom widget.', 
'text_domain'),) // Args
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        if (!empty($instance['title'])) {
            echo $args['before_title'] . apply_filters('widget_title',  
$instance['title']) . $args['after_title'];
        }
        // Widget content
        echo __('Hello World From My Custom Widget!', 'text_domain');
        echo $args['after_widget'];
    }

    public function form($instance) {
        // Form in WordPress admin
    }

    public function update($new_instance, $old_instance) {
        // Processes widget options to be saved
    }
}

function register_my_custom_widget() {
    register_widget('My_Custom_Widget');
}
add_action('widgets_init', 'register_my_custom_widget');

Lorsque vous modifiez le thème actif à l’aide du lien Personnaliser sous l’onglet Apparence de la zone d’administration, vous pouvez ajouter un nouveau widget personnalisé là où vous le souhaitez.

La configuration du widget personnalisé sur la colonne latérale et l'utilisation du widget sur une page d'exemple.
La configuration du widget personnalisé sur la colonne latérale et l’utilisation du widget sur une page d’exemple.

Utiliser les classes WordPress

WordPress propose différentes classes que vous pouvez utiliser pour interagir avec les fonctionnalités de base du CMS. Deux de ces classes sont WP_User et WP_Post, qui représentent respectivement les utilisateurs et les articles.

En prolongeant l’exemple de l’extension WordPress présentée ci-dessus, incorporez ces classes pour créer un code court  qui affiche des informations sur l’auteur d’un article et des détails sur l’article lui-même.

Enregistrez ce code sous le nom my-oop-shortcode-handler-extended.php dans le répertoire wp-content/plugins. Enfin, activez l’extension.

<?php
/**
* Plugin Name: Extended OOP Shortcode Handler
* Description: Extends the shortcode handler to display post and author 
information.
* Version: 1.1
* Author: Your Name
*/

class ExtendedOOPShortcodeHandler {
    public function __construct() {
        add_shortcode('post_author_details', array($this,   
'displayPostAuthorDetails'));
    }

    public function displayPostAuthorDetails($atts) {
        global $post; // Accessing the global $post object to get current post  
details

        $attributes = shortcode_atts([
            'post_id' => $post->ID, // Default to the current post ID
        ], $atts);

        $postDetails = get_post($attributes['post_id']); // Getting the WP_Post  
object
        if (!$postDetails) {
            return "Post not found.";
        }

        $authorDetails = new WP_User($postDetails->post_author); // Getting the 
WP_User object

        $output = "<div class='post-author-details'>";
        $output .= "<h2>Author Information</h2>";
        $output .= "<p>Name: " . esc_html($authorDetails->display_name) . 
"</p>";
        $output .= "<h2>Post Information</h2>";
        $output .= "<p>Title: " . esc_html($postDetails->post_title) . "</p>";
        $output .= "<p>Content: " . 
esc_html(wp_trim_words($postDetails->post_content, 20, '...')) . "</p>";
        $output .= "</div>";

        return $output;
    }
}

new ExtendedOOPShortcodeHandler();

Dans cette version étendue, vous avez créé un code court : [post_author_details post_id="1"].

La page d'exemple en mode édition avec le message du code court personnalisé étendu ajouté.
La page d’exemple en mode édition avec le message du code court personnalisé étendu ajouté.

Lorsqu’il est ajouté à un article ou à une page, il affiche des détails sur l’auteur de l’article (en utilisant la classe WP_User ) et l’article lui-même (en utilisant la classe WP_Post ).

La POO et la REST ‘API WordPress

La REST API WordPress est un ajout moderne à WordPress qui vous permet d’interagir avec les données du site d’une manière plus programmable. Elle s’appuie largement sur la POO, en utilisant des classes pour définir les points de terminaison, les réponses et le traitement des requêtes. Il s’agit d’une évolution claire de ses racines procédurales traditionnelles vers l’adoption de la POO.

Contrastant fortement avec les principes de la POO, une grande partie du cœur de WordPress, en particulier ses premiers composants tels que l’API des thèmes et des extensions, est écrite dans un style de programmation procédural.

Par exemple, alors qu’une approche procédurale pourrait manipuler directement des variables globales et s’appuyer sur une séquence de fonctions pour les tâches, la POO dans la REST REST encapsule la logique dans des classes. Par conséquent, des méthodes spécifiques au sein de ces classes gèrent des tâches telles que la recherche, la création, la mise à jour ou la suppression d’articles.

Cela permet de séparer clairement les préoccupations et de faciliter l’extension et le débogage de la base de code.

Grâce aux classes qui définissent les points d’accès et gèrent les requêtes, comme la récupération des articles avec une requête GET /wp-json/wp/v2/posts, la RESt’API REST offre un moyen structuré et évolutif d’interagir avec les données de WordPress, en renvoyant des réponses au format JSON.

Tirer parti de Kinsta pour l’hébergement PHP et WordPress

Les solutions d’hébergement de Kinsta permettent d’optimiser les applications PHP et de gérer l’hébergement WordPress, en répondant aux configurations PHP traditionnelles et aux besoins spécifiques de WordPress. Avec une infrastructure robuste construite sur des technologies de pointe comme Google Cloud, Kinsta facilite des performances et une évolutivité inégalées pour les applications PHP basées sur la POO.

Pour les sites WordPress, le service d’hébergement WordPress spécialisé de Kinsta offre des fonctionnalités telles que les mises à jour automatiques, la surveillance de la sécurité et l’assistance d’experts. Il garantit une gestion sans tracas et des performances supérieures, ce qui le rend idéal pour les développeurs et les entreprises.

Résumé

Comme vous avez pu le constater tout au long de cet article, la POO offre une flexibilité, une évolutivité et une facilité de maintenance inégalées dans le développement de PHP et de WordPress.

En tant qu’hébergeur WordPress, Kinsta reconnait ce besoin et offre des solutions sur mesure pour soutenir les développeurs comme vous dans vos efforts de PHP OOP. C’est pourquoi nos solutions d’hébergement d’applications et de WordPress sont conçues pour vous aider à construire des projets WordPress performants, évolutifs et basés sur la POO.

Essayez Kinsta dès aujourd’hui pour voir comment nous pouvons vous aider à construire des sites WordPress de premier plan !

Avez-vous expérimenté les avantages de la POO dans vos projets ? Ou êtes-vous curieux de savoir comment elle peut transformer votre processus de développement ? Partagez dans les commentaires ci-dessous.

Jeremy Holcombe Kinsta

Rédacteur en chef du contenu et du marketing chez Kinsta, développeur web WordPress et rédacteur de contenu. En dehors de WordPress, j'aime la plage, le golf et le cinéma. J'ai aussi des problèmes avec les personnes de grande taille ;).