Fonctionnel ou POO en PHP : que choisir en 2024 ?

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Deux mondes dans un même langage : pourquoi est-ce important ?

\n

Quand on parle de PHP, on pense immédiatement à l'approche classique orientée objet (POO). Classes, héritage, encapsulation — c'est la base enseignée dans tous les cours. Mais il y a un autre côté de la médaille : l'approche fonctionnelle. Et devinez quoi ? PHP sait faire les deux, et très bien.

\n

Dans cet article, nous ne débattrons pas de ce qui est mieux. Nous allons comprendre quand et quelle approche utiliser pour que votre code soit non seulement beau, mais aussi rapide. Si vous codez en PHP et voulez dépasser le simple "ça marche", vous êtes au bon endroit.

\n\n

PHP orienté objet : un classique qui ne se démode pas

\n

La POO en PHP, c'est une question de structure et de réutilisation. Vous créez des classes qui décrivent les entités de votre application : utilisateur, commande, produit. Chaque classe est responsable de son propre domaine.

\n\n

Exemple : travailler avec un utilisateur via la POO

\n

Regardons un exemple typique. Supposons que nous devions créer un utilisateur et lui envoyer un email de bienvenue.

\n
<?php\nclass User {\n    private string $name;\n    private string $email;\n\n    public function __construct(string $name, string $email) {\n        $this->name = $name;\n        $this->email = $email;\n    }\n\n    public function sendWelcomeEmail(): void {\n        $subject = "Bienvenue, {$this->name}!";\n        $message = "Bonjour, {$this->name}. Nous sommes ravis de vous voir sur notre site.";\n        mail($this->email, $subject, $message);\n    }\n\n    public function getName(): string {\n        return $this->name;\n    }\n}\n\n$user = new User("Ivan", "ivan@example.com");\n$user->sendWelcomeEmail();\necho "Email envoyé à l'utilisateur : " . $user->getName();\n?>
\n

Tout est logique ici : les données (nom, email) et les méthodes (envoi d'email) sont au même endroit. C'est pratique quand vous avez de nombreuses opérations différentes sur une même entité.

\n\n

Avantages de la POO en PHP

\n
    \n
  • Lisibilité : le code est divisé en blocs logiques, facile de trouver la méthode souhaitée.
  • \n
  • Héritage : vous pouvez créer une classe de base et l'étendre.
  • \n
  • Encapsulation : les données sont protégées contre les modifications accidentelles (private/protected).
  • \n
  • Polymorphisme : une interface, différentes implémentations.
  • \n
\n\n

Inconvénients de la POO

\n
    \n
  • Redondance : pour une tâche simple (par exemple, formater une chaîne), écrire une classe est excessif.
  • \n
  • État : les objets stockent un état, ce qui peut entraîner des bugs si les mutations ne sont pas surveillées.
  • \n
  • Mémoire : chaque objet occupe plus de mémoire qu'une simple fonction.
  • \n
\n\n

PHP fonctionnel : minimalisme et pureté

\n

La programmation fonctionnelle en PHP ne se résume pas à "écrire une fonction". C'est une philosophie où les fonctions sont les acteurs principaux. Elles n'ont pas d'effets secondaires, ne modifient pas l'état global et retournent toujours un résultat prévisible.

\n\n

Exemple : la même tâche, mais de manière fonctionnelle

\n

Résolvons la même tâche — création d'un utilisateur et envoi d'un email — mais sans classes.

\n
<?php\nfunction createUser(string $name, string $email): array {\n    return ['name' => $name, 'email' => $email];\n}\n\nfunction sendWelcomeEmail(array $user): void {\n    $subject = "Bienvenue, {$user['name']}!";\n    $message = "Bonjour, {$user['name']}. Nous sommes ravis de vous voir sur notre site.";\n    mail($user['email'], $subject, $message);\n}\n\nfunction getUserName(array $user): string {\n    return $user['name'];\n}\n\n$user = createUser("Ivan", "ivan@example.com");\nsendWelcomeEmail($user);\necho "Email envoyé à l'utilisateur : " . getUserName($user);\n?>
\n

Cela semble plus simple ? Oui. Mais il n'y a pas d'encapsulation ici — les données sont simplement un tableau. En revanche, chaque fonction fait une seule action et ne connaît rien du "monde extérieur".

\n\n

Fonctionnel avancé

Blogs

Book Recommendations