Aller au contenu principal

PHP est-il un vrai langage de programmation ?

La blague revient tous les mois sur les forums et les réseaux : PHP ne serait pas un vrai langage. Cet article remonte à l'origine documentée de la critique, explique ce qu'elle visait il y a quinze ans, montre avec du code ce que PHP 8.5 permet aujourd'hui, et donne les chiffres relevés en septembre 2026 pour répondre sans y passer la soirée.

Actualités tech ·
Adel LATIBI
Adel LATIBI

Le Briefing Dev - les ressources et actus de la semaine, droit dans ta boîte chaque vendredi gratuitement.

En vous inscrivant, vous acceptez de recevoir notre newsletter. Désinscription possible à tout moment.

Tous les langages ont leurs détracteurs. PHP, lui, a des blagues. Elles circulent depuis une vingtaine d'années, elles ressortent dès qu'un fil de discussion porte sur le choix d'un premier langage côté serveur, et elles tiennent en une ligne : PHP n'est pas un vrai langage de programmation.

La phrase est courte, elle ne s'appuie sur rien de précis, et elle suffit pourtant à faire hésiter quelqu'un qui envisageait une formation PHP ou une candidature sur une offre Symfony. Répondre à une critique qui ne dit pas ce qu'elle reproche demande un travail que personne n'a envie de faire un dimanche soir.

Le fond du malentendu tient à un mot que personne ne définit. Un « vrai » langage, mesuré à quoi ? La formule sert à disqualifier sans argumenter, et elle mélange le code hérité qu'on croise dans de vieux projets avec ce que le langage permet en 2026.

Cet article sépare les deux. Origine documentée de la critique, ce qu'elle visait à l'époque, ce que PHP 8.5 met à disposition aujourd'hui, code à l'appui, et les critères qui permettent de trancher pour toi-même la prochaine fois que la remarque tombe.

La remarque, telle qu'elle arrive

Le scénario est toujours le même. Une personne en reconversion demande par où commencer côté serveur. Trente réponses arrivent. Une partie recommande Python, une autre Node, et quelqu'un ajoute que PHP, de toute façon, ce n'est pas de la programmation. Personne ne développe. La discussion part ailleurs et la personne qui posait la question repart avec un doute au lieu d'une réponse.

Quand on demande des précisions, quatre reproches reviennent :

  • le langage serait mal conçu, avec des noms de fonctions incohérents et un ordre d'arguments imprévisible ;
  • il ne serait pas typé, donc impossible à sécuriser sur un gros projet ;
  • il servirait juste à coller des morceaux de HTML entre deux requêtes SQL ;
  • il serait lent, et réservé aux sites vitrines sous WordPress.

Ces reproches ont une histoire. Deux d'entre eux ont été justes pendant longtemps, un troisième décrit une pratique de développeur plutôt que le langage, et le dernier ne résiste pas à trois minutes de vérification. Encore faut-il savoir lequel est lequel, et c'est précisément ce que la formule « pas un vrai langage » empêche de faire, puisqu'elle regroupe tout dans un même jugement sans jamais s'exposer à une réfutation.

D'où vient la critique

La documentation officielle de PHP raconte elle-même cette histoire, et elle est plus honnête que ses détracteurs. En 1994, Rasmus Lerdorf écrit en C un jeu de binaires CGI pour compter les visites sur son CV en ligne. Le tout s'appelle Personal Home Page Tools. Le manuel décrit la version suivante, FI, comme un outil CGI qui gagnait des utilisateurs sans être encore un langage.

Le passage au statut de langage est daté, lui aussi. En avril 1996, PHP/FI ajoute les fonctions définies par l'utilisateur et le support de plusieurs bases. En 1997, Andi Gutmans et Zeev Suraski réécrivent complètement l'analyseur syntaxique, et PHP 3.0 est annoncé en juin 1998 avec le support objet et une syntaxe plus cohérente. PHP 4 arrive en mai 2000 sur le moteur Zend, PHP 5 en juillet 2004 avec un nouveau modèle objet.

1994 Outils CGI en C 1998 PHP 3 support objet 2004 PHP 5 modèle objet 2015 PHP 7 moteur Zend 3 2020 PHP 8 types, JIT 2025 PHP 8.5
Trente ans d'évolution, d'un jeu de scripts CGI à la version stable de novembre 2025. Dates issues du manuel officiel PHP et des annonces de sortie sur php.net.

La réputation, elle, s'est fixée entre 2005 et 2012. À cette période, le langage n'avait pas de déclarations de types scalaires, la bibliothèque standard cumulait des conventions de nommage héritées de dix ans de contributions, et une bonne partie du code publié en ligne concaténait des variables issues d'un formulaire directement dans une requête SQL. L'extension historique mysql, celle qui rendait ces injections si faciles, a été retirée du langage avec PHP 7.0 en 2015.

Mon avis après quatorze ans à écrire du code : la critique était fondée jusqu'à PHP 5.6. Elle a cessé de l'être avec PHP 7, dont le manuel officiel indique qu'il tourne jusqu'à deux fois plus vite que la 5.6. La répéter aujourd'hui renseigne surtout sur la date à laquelle son auteur a ouvert le langage pour la dernière fois.

Quatre critères pour évaluer un langage avant d'y investir six mois

Il n'existe aucune définition technique du « vrai langage de programmation ». Aucun organisme ne délivre ce label. Quand on veut évaluer sérieusement un langage avant d'y investir six mois d'apprentissage, quatre questions donnent des réponses vérifiables.

Qui décide de ce qui entre dans le langage ?

Chez PHP, toute modification du langage passe par une RFC publiée sur le wiki officiel, discutée sur la liste de diffusion internals, puis soumise au vote. Le texte de gouvernance en vigueur exige une majorité des deux tiers pour accepter un changement du langage. Un développeur seul ne peut donc pas ajouter une syntaxe parce qu'il la trouve pratique, et les propositions rejetées le restent, avec leur historique consultable par n'importe qui.

Qui maintient l'implémentation, et avec quel argent ?

La PHP Foundation finance des développeurs qui travaillent sur le cœur du langage. Son rapport trimestriel publié le 21 juillet 2026 fait état de treize contractants répartis dans huit pays, travaillant sur le moteur, les extensions, la sécurité de l'écosystème et les builds Windows. Une équipe payée pour maintenir un interpréteur écrit en C reste un signe assez fiable qu'on a affaire à un langage et non à un bricolage.

Le cycle de vie est-il prévisible ?

Une version mineure par an, sortie en novembre. Chaque branche reçoit deux ans de support actif, puis deux ans de correctifs de sécurité critiques. Le tableau officiel de php.net donne les dates : PHP 8.5, sortie le 20 novembre 2025, est en support actif jusqu'au 31 décembre 2027 puis en sécurité jusqu'au 31 décembre 2029. Pour un responsable technique qui planifie des montées de version, ce calendrier vaut mieux qu'une promesse.

Est-ce que ça tourne en production, ailleurs que dans des tutoriels ?

Relevé W3Techs du 8 septembre 2026 : PHP est détecté sur 70,2 % des sites dont le langage serveur est identifiable, devant JavaScript à 7,2 % et Ruby à 7,0 %. La méthode a ses limites, elle compte des sites et non des développeurs ni du chiffre d'affaires, et elle surpondère les CMS. Elle suffit pour écarter l'idée d'un langage mort.

Ce que PHP 8.5 permet d'écrire

Les exemples ci-dessous ciblent PHP 8.5, version stable au moment où ces lignes sont écrites. Ils utilisent la syntaxe recommandée par la documentation de cette version, pas des écritures antérieures encore tolérées.

Le typage strict, fichier par fichier

Les types scalaires sont arrivés avec PHP 7.0. Avec declare(strict_types=1) en tête de fichier, le moteur refuse les conversions silencieuses et lève une TypeError à l'appel fautif.

<?php
// Tous les exemples de cet article ciblent PHP 8.5
declare(strict_types=1);
 
function surface(float $largeur, float $hauteur): float
{
    return $largeur * $hauteur;
}
 
surface(3, 4);     // 12.0 : un entier est élargi en flottant
surface('3', 4);   // TypeError : le paramètre $largeur attend un float

La déclaration s'applique au fichier dans lequel elle est écrite, ce qui permet d'introduire le typage strict progressivement sur un projet existant.

Objets immuables et énumérations

Les énumérations existent depuis PHP 8.1, les classes en lecture seule depuis 8.2. PHP 8.5 ajoute la modification de propriétés pendant le clonage, ce qui rend enfin lisible le motif des méthodes qui renvoient une copie modifiée.

enum Statut: string
{
    case Brouillon = 'brouillon';
    case Publie = 'publie';
}
 
final readonly class Article
{
    public function __construct(
        public string $titre,
        public Statut $statut = Statut::Brouillon,
    ) {}
 
    public function publier(): self
    {
        return clone($this, ['statut' => Statut::Publie]);
    }
}
 
$brouillon = new Article('PHP est-il un vrai langage');
$publie = $brouillon->publier();
 
var_dump($publie->statut === Statut::Publie);        // bool(true)
var_dump($brouillon->statut === Statut::Brouillon);  // bool(true)

L'objet de départ n'a pas bougé. Un statut ne peut prendre que les valeurs déclarées dans l'énumération, et une faute de frappe sur une chaîne devient une erreur détectée avant l'exécution par les outils d'analyse statique.

Les hooks de propriété, à la place des getters et setters

PHP 8.4 a introduit les hooks de propriété. La logique de lecture et d'écriture se déclare sur la propriété elle-même, sans écrire deux méthodes pour chaque champ.

class Utilisateur
{
    public string $email {
        set (string $value) {
            $this->email = mb_strtolower(trim($value));
        }
    }
 
    public function __construct(string $email)
    {
        $this->email = $email;
    }
}
 
$utilisateur = new Utilisateur('  Adel@LaPolaris.FR ');
echo $utilisateur->email;   // adel@lapolaris.fr

L'opérateur pipe

Nouveauté de PHP 8.5, l'opérateur |> enchaîne des appels de gauche à droite. Les fonctions imbriquées qui se lisaient de l'intérieur vers l'extérieur se lisent maintenant dans l'ordre d'exécution.

$slug = '  PHP est un vrai langage  '
    |> trim(...)
    |> mb_strtolower(...)
    |> (fn (string $texte) => str_replace(' ', '-', $texte));
 
echo $slug;   // php-est-un-vrai-langage

Ajoute à ça les attributs natifs depuis 8.0, les fibres depuis 8.1, la visibilité asymétrique depuis 8.4 et l'extension URI intégrée en 8.5, et la liste des choses qu'on reprochait au langage en 2010 se réduit sérieusement. Ces mécanismes se travaillent dans la formation PHP orienté objet, et les bases côté serveur dans PHP moderne.

Les pièges qui entretiennent le malentendu

Juger le langage sur le parc installé

Le même relevé W3Techs du 8 septembre 2026 montre que parmi les sites qui utilisent PHP, 63,5 % tournent en version 8, 28,5 % en version 7 et 7,9 % en version 5. Plus d'un tiers du parc fonctionne donc sur une branche sans support. Le code qu'on croise en ouvrant un vieux projet ne dit rien de ce que le langage permet, il dit que personne n'a payé la montée de version.

Attendre du JIT qu'il accélère un site

L'annonce officielle de PHP 8.0 est explicite sur ce point : le JIT en mode tracing donne environ trois fois mieux sur des tests synthétiques et de 1,5 à 2 fois sur certaines applications longues, mais les performances d'une application typique restent au niveau de PHP 7.4. Activer le JIT sur un site lent ne réglera rien. Les gains viennent d'OPcache, des requêtes SQL et de l'architecture.

Oublier que le typage strict est déclaratif

Sans declare(strict_types=1), PHP applique le mode coercitif et convertit ce qu'il peut. Un fichier qui oublie la ligne accepte une chaîne là où un entier était annoncé. Sur un projet à plusieurs, la ligne se met dans le modèle de fichier de l'éditeur et se vérifie en intégration continue.

Croiser les fonctions de chaîne historiques et l'UTF-8

Les fonctions comme strtolower() ou strlen() raisonnent en octets. Sur du texte accentué, elles renvoient des résultats surprenants, d'où les versions mb_* utilisées dans les exemples plus haut. Cet héritage existe, il s'explique par la compatibilité ascendante, et c'est le genre de détail qui alimente les moqueries quand on le découvre en production.

Confondre le langage et son application la plus visible

Beaucoup de développeurs ne rencontrent PHP qu'à travers un thème WordPress modifié à la main. C'est une porte d'entrée légitime, elle donne du travail, et elle ne représente qu'une fraction de ce qui s'écrit en PHP. Une application Symfony avec injection de dépendances, tests automatisés et analyse statique n'a plus grand-chose en commun avec un fichier functions.php de 2 000 lignes. La roadmap Symfony détaille cet écart étape par étape.

Rester sur une branche en fin de vie

Le tableau officiel des versions supportées est net : PHP 8.2 ne reçoit plus que des correctifs de sécurité critiques jusqu'au 31 décembre 2026, et le support actif de PHP 8.3 s'est arrêté fin 2025. Un projet qui démarre aujourd'hui vise 8.4 ou 8.5. Un projet existant regarde d'abord la date de fin de support de sa branche, et ensuite seulement les nouveautés de syntaxe.

Alors, vrai langage ou pas

PHP a une grammaire, un moteur d'exécution écrit en C, un système de types, un gestionnaire de dépendances, des outils d'analyse statique, un processus de décision documenté et une fondation qui paie treize personnes pour l'entretenir. La question de départ n'a pas de réponse technique parce qu'elle n'était pas une question technique.

Reste une chose que cet article ne tranchera pas à ta place : savoir si c'est le bon langage pour toi. Ça dépend du marché que tu vises, des offres autour de chez toi et du type de projets qui te motivent. Si tu passes par Symfony, la formation Symfony 7 couvre le passage du langage au framework professionnel.

La prochaine fois que la remarque tombe dans un fil de discussion, une question suffit à voir ce qu'elle vaut : sur quelle version.

Questions fréquentes

PHP est-il un langage compilé ou interprété ?

Le code source est d'abord compilé en instructions intermédiaires appelées opcodes, puis exécuté par le moteur Zend. OPcache garde ces opcodes en mémoire pour éviter de recompiler à chaque requête. Depuis PHP 8.0, un compilateur à la volée peut en plus traduire certaines portions en code machine. La distinction compilé ou interprété décrit une implémentation, pas une hiérarchie entre langages.

PHP est-il mort en 2026 ?

Le relevé W3Techs du 8 septembre 2026 détecte PHP sur 70,2 % des sites dont le langage serveur est identifiable, loin devant les suivants. Une version majeure sort chaque année en novembre, et la PHP Foundation finance treize contractants sur le cœur du langage. Le rythme de publication et le financement du projet ne correspondent pas à ceux d'une technologie abandonnée.

Faut-il apprendre PHP quand on se reconvertit ?

Le critère utile est le marché visé plutôt que la réputation en ligne. En France, les offres backend autour de Symfony et de Laravel restent nombreuses, et le parc WordPress génère une demande continue de maintenance. Regarde les annonces publiées dans ta région sur les trois derniers mois, compte celles qui mentionnent PHP, et compare avec Python ou Node avant de choisir.

Quelle version de PHP faut-il viser aujourd'hui ?

PHP 8.5 pour un nouveau projet, à condition que l'hébergement et les dépendances suivent. PHP 8.4 reste en support actif jusqu'au 31 décembre 2026. PHP 8.2 n'a plus que des correctifs de sécurité critiques jusqu'à cette même date. Les dates de fin de support de chaque branche sont publiées sur php.net et se vérifient en une minute.

PHP est-il typé ?

PHP est typé dynamiquement, avec des déclarations de types vérifiées à l'exécution sur les paramètres, les retours, les propriétés et les constantes de classe. Le mode strict s'active fichier par fichier avec declare(strict_types=1). Les outils d'analyse statique comme PHPStan ou Psalm ajoutent une vérification avant exécution, avec des niveaux de sévérité réglables sur un projet existant.

Pourquoi la mauvaise réputation persiste-t-elle malgré ces changements ?

Une réputation se met à jour plus lentement qu'un langage. Les articles critiques écrits entre 2010 et 2013 sont toujours en ligne et bien référencés, une partie du parc installé tourne encore sur des versions sorties avant ces articles, et les développeurs qui ont quitté PHP à l'époque n'ont aucune raison d'y revenir vérifier. La blague survit à ce qu'elle décrivait.

Vous êtes expert ?

Partagez votre expertise sur notre blog

Tutoriel, retour d'expérience, analyse - publiez un article invité et gagnez en visibilité.

Écrire pour nous