L’héritage en PHP, ton univers impitoyable

1 min de lecture

Si vous pensiez que la Programmation Orientée Objet en PHP était une joyeuse foire où chacun fait ce qu’il veut, détrompez-vous : c’est une histoire de familles dans le ranch SouthFork, un mauvais repo, de patriarches, de classes mères, d’héritage, de trahisons… et de méthodes protégées.

Générique

Musique épique, trompettes et chevaux qui galopent, ranch en slow-mo sous une \Exception fatale…

<?php

// L'univers impitoyable des objets
use Dynasty\Oil\Pognon;
use Dynasty\Rancunes\Famille;
use Dynasty\Dependencies\Alcohol;

final class SouthFork
{
    public function run(): void
    {
        echo "Bienvenue à SouthFork, où les classes sont longues, les héritages douteux, et les tests unitaires inexistants.";
    }
}

Previously on Dallas

JR veut hériter de tout, même des bugs. Sue Ellen override sa vie entre deux verres de gin. Bobby croit encore à l’amour et aux singletons bienveillants. Mamie Ewing est final, personne peut plus la modifier. Et pendant ce temps, le ranch crashe plus souvent qu’un serveur Apache sur un Raspberry Pi.

Le patriarche Ewing : l’interface

Dans cette famille, tout commence avec un contrat. Un truc abstrait, une promesse en l’air. Bref, une interface. Le patriarche Ewing ne fait rien, mais exige tout.

interface Ewing {
    public function manipuler(): void;
    public function trahir(): void;
    public function sourireFaux(): void;
}

le gin, toujours le gin

Tu ne peux pas hériter de deux classes, mais tu peux injecter un comportement. Comme cette tante reloue qui ne vit plus ici mais squatte encore les vacances. En PHP, ça s’appelle un trait.

trait Alcoolique {
    public function boire(): void {
        echo "Glou glou glou.";
    }
}

JR : il parle beaucoup il promet mais n’implémente rien

Et forcément, JR hérite. Parce que même en POO, c’est toujours le plus con qui prend la suite.

class JR implements Ewing
{
    public function manipuler(): void {
        throw new \LogicException("Pas encore implémenté, mais promis je le fais.");
    }

    public function trahir(): void {
        echo "J’ai trahi tout le monde, y compris le typage.";
    }

    public function sourireFaux(): void {
        echo "😏 (avec arrière-goût de poison)";
    }
}

Sue Ellen : l’héritière qui override dans le vide

Elle aussi hérite. Mais elle ne fait que réécrire des méthodes sans vraiment les utiliser. C’est un override passif-agressif. Elle override les méthodes juste pour prouver qu’elle est là, qu’elle existe… Mais franchement, on sent que son cœur n’y est pas.

class SueEllen implements Ewing
{
    use Alcoolique;

    public function manipuler(): void {
        echo "Je manipule ma coupe de gin tonic.";
    }

    public function trahir(): void {
        echo "Je trahis mes résolutions de janvier.";
    }

    public function sourireFaux(): void {
        echo "🙂 mais triste à l’intérieur.";
    }
}

Bobby : le refactor humaniste

Bobby, c’est le genre de mec qui veut bien faire. Il croit à la paix dans le code. Il respecte les conventions, les tests, et parent::. Il pense qu’un bon héritage, c’est un héritage transparent. C’est touchant. Et triste.

Un Ewing de base :

class EwingDeBase {
    public function manipuler(): void {
        echo "🔧 Manipulation standard activée.\n";
    }

    public function trahir(): void {
        echo "🤐 Je garde mes trahisons pour moi.\n";
    }

    public function sourireFaux(): void {
        echo "😬 Sourire corporate.\n";
    }
}

Et voici Bobby :

class Bobby extends EwingDeBase implements Ewing
{
    public function manipuler(): void {
      	parent::manipuler();
        echo "Et si on faisait ça avec amour et des tests ?";
    }

    public function trahir(): void {
      	parent::trahir();
        echo "(Mais avec un message Slack pour prévenir.)";
    }

    public function sourireFaux(): void {
        echo "😊 sincère (c’est louche).";
    }
}

Sauf que personne n’en a rien à faire, Bobby. On est dans Dallas, pas chez les Bisounours.

L’héritage multiple ? NON. JR peut pas être aussi le fils de Chuck Norris

PHP dit : “un seul parent.” Point barre. C’est pas un épisode croisé avec Walker Texas Ranger.

class ChuckNorris {}
// class JR extends Ewing, ChuckNorris {} // LOL NON

Et si t’insistes ? Fatal error. Comme quand Sue Ellen essaye d’ouvrir une bouteille sans se faire griller.

Le constructeur : où Sue Ellen planque le gin

Le __construct() en PHP, c’est la scène d’ouverture. Le moment où on instancie les problèmes.

class Ewing {
    public function __construct() {
        echo "Bienvenue dans la famille. Prends un whisky.";
    }
}

Mais Sue Ellen ne peut pas s’empêcher d’y ajouter sa touche personnelle…

class SueEllen extends Ewing {
    public function __construct() {
        parent::__construct();
        echo " Et file-moi les glaçons.";
    }
}

Saison finale : quand l’héritage tourne mal

Trop d’héritage, c’est comme trop de JR : plus personne ne comprend rien. On se retrouve avec une classe qui a autant de sens qu’un plan de Cliff Barnes.

Un spinoff : et si tu n’héritais pas ?

Dans la grande saga de la POO en PHP, l’héritage n’est pas un droit, c’est une charge mentale. Et comme dans Dallas, ceux qui héritent sont rarement ceux qui méritent.

Alors avant de coder ta classe JR, pose-toi la vraie question :

“Est-ce que j’ai vraiment besoin d’hériter… ou est-ce que je rejoue juste un mauvais soap en boucle ?”

Confidentialité

Ce site utilise Umami pour analyser le trafic de manière anonyme. Acceptez-vous la collecte de données anonymes ?