Apprendre PHP en 2026 : Guide Complet pour Débuter

12 min de lecture PHP

Introduction

"PHP est mort." Tu as sûrement déjà lu ça quelque part sur Twitter ou Reddit. C'est un mythe qui revient chaque année depuis 2010. La réalité ? PHP propulse 78% des sites web dont le contenu serveur est identifiable. WordPress, qui représente à lui seul 43% du web mondial, tourne sur PHP. Laravel est l'un des frameworks backend les plus populaires au monde. Et des plateformes comme Shopify, Wikipedia, Slack (dans ses débuts) ou encore Etsy doivent leur existence à PHP.

PHP n'est pas mort. Il a évolué. Le PHP de 2026 n'a plus rien à voir avec le PHP bricolé des années 2000. Avec PHP 8.4, le langage offre du typage fort, des enums, des fibres pour la concurrence, du pattern matching et des performances qui rivalisent avec des langages compilés grâce au JIT.

Si tu veux apprendre un langage backend pragmatique, demandé sur le marché et qui te permettra de créer des projets concrets rapidement, PHP est un excellent choix. Ce guide t'accompagne de l'installation jusqu'à ton premier projet fonctionnel.

Pourquoi apprendre PHP en 2026 ?

Avant de plonger dans le code, parlons concret : pourquoi investir ton temps dans PHP plutôt qu'un autre langage ?

Un marché de l'emploi solide

Si tu envisages de changer de carrière, PHP est un excellent tremplin — consulte notre guide de reconversion développeur web en 2026 pour découvrir les parcours possibles.

En France, un développeur PHP junior démarre entre 32 000 et 38 000 euros bruts par an. Un profil confirmé (3-5 ans) atteint facilement les 45 000 à 55 000 euros, et un expert Laravel ou Symfony senior peut dépasser les 65 000 euros. Les offres ne manquent pas : agences web, startups SaaS, e-commerce, ESN — tout le monde cherche des développeurs PHP.

WordPress et l'écosystème

43% du web tourne sur WordPress. Ça veut dire que des millions de sites ont besoin de développeurs capables de créer des thèmes, des plugins, de maintenir et d'optimiser des installations. Apprendre PHP, c'est aussi ouvrir la porte au freelancing WordPress, un marché énorme.

Laravel : le framework qui a tout changé

Laravel a transformé l'image de PHP. Son écosystème est impressionnant : Eloquent ORM, Blade templating, queues, broadcasting en temps réel, et même des solutions complètes comme Laravel Forge et Laravel Vapor pour le déploiement. Une startup peut aller en production en quelques semaines avec Laravel.

PHP 8.x : un langage moderne

Regarde ce que PHP sait faire aujourd'hui :

<?php// Enums (PHP 8.1)enum Statut: string {    case Actif = 'actif';    case Inactif = 'inactif';    case Suspendu = 'suspendu';}// Types d'intersection (PHP 8.1)function traiter(Iterator&Countable $collection): void {    echo count($collection) . " éléments à traiter.";}// Propriétés en lecture seule (PHP 8.2)class Utilisateur {    public function __construct(        public readonly string $nom,        public readonly string $email,    ) {}}$user = new Utilisateur('Ahmed', 'ahmed@exemple.fr');echo $user->nom; // Ahmed

Ce n'est plus le PHP de tes parents. C'est un langage typé, structuré, avec des fonctionnalités dignes des langages les plus modernes.

PHP ou Python : lequel choisir pour débuter ?

C'est la question qui revient tout le temps. La réponse honnête : ça dépend de ce que tu veux construire.

Choisis PHP si :

Choisis Python si :

En réalité, les deux langages sont excellents pour débuter. La syntaxe de Python est légèrement plus épurée, mais PHP te confronte directement au web réel : requêtes HTTP, formulaires, bases de données, sessions. Tu apprends le développement web en le pratiquant, pas en abstraction.

Et rien ne t'empêche d'apprendre les deux. Si tu veux utiliser l'IA pour apprendre à coder, elle peut t'aider à accélérer ton apprentissage quel que soit le langage.

Installer PHP sur ton ordinateur

Pas besoin de configuration compliquée. La méthode la plus simple pour débuter : XAMPP.

Méthode simple : XAMPP

  1. Télécharge XAMPP sur apachefriends.org (Windows, Mac, Linux)
  2. Installe-le avec les options par défaut
  3. Lance le panneau de contrôle XAMPP
  4. Démarre Apache
  5. Place tes fichiers dans le dossier htdocs
  6. Ouvre http://localhost dans ton navigateur

Vérifie que tout fonctionne en créant un fichier htdocs/info.php :

<?phpphpinfo();

Ouvre http://localhost/info.php dans ton navigateur. Tu devrais voir une page violette avec toute la configuration PHP. Si c'est le cas, PHP est prêt.

Pour les curieux : Docker

Si tu connais déjà un peu le terminal, Docker est plus propre :

// Fichier docker-compose.yml (pas du PHP, mais utile à connaître)// docker-compose up -d et c'est parti// Image officielle : php:8.4-apache

Mais ne te complique pas la vie au début. XAMPP fonctionne, c'est ce qui compte.

Ton premier script PHP

Crée un fichier bonjour.php dans ton dossier htdocs :

<?php// Ton premier script PHPecho "Bonjour, monde !";echo "<br>";echo "Je suis en train d'apprendre PHP en 2026.";

Ouvre http://localhost/bonjour.php. Tu vois ton texte s'afficher ? Parfait, tu viens d'exécuter du PHP.

Comprendre ce qui se passe

PHP peut aussi s'intégrer directement dans du HTML :

<!DOCTYPE html><html lang="fr"><head>    <title>Ma première page PHP</title></head><body>    <h1><?php echo "Page générée le " . date('d/m/Y à H:i'); ?></h1>    <p>Cette page mélange HTML et PHP.</p></body></html>

Chaque fois que tu rafraîchis la page, l'heure se met à jour. C'est ça la puissance de PHP : du contenu dynamique généré côté serveur.

Les variables et types en PHP

En PHP, toutes les variables commencent par le signe dollar $. Pas d'exception.

<?php// Chaînes de caractères (string)$prenom = "Ahmed";$message = 'Bienvenue sur GoGoKodo';// Nombres entiers (int)$age = 28;$annee = 2026;// Nombres décimaux (float)$prix = 19.99;$tva = 0.20;// Booléens (bool)$estActif = true;$estAdmin = false;// Tableaux (array)$langages = ['PHP', 'JavaScript', 'Python'];$scores = [95, 87, 72, 100];// Tableau associatif$utilisateur = [    'nom' => 'Seneina',    'prenom' => 'Ahmed',    'age' => 28,    'langages' => ['PHP', 'JS'],];echo $utilisateur['prenom']; // Ahmedecho $langages[0]; // PHP

Typage dynamique vs typage strict

PHP est dynamiquement typé par défaut : une variable peut changer de type. Mais depuis PHP 7, tu peux activer le mode strict :

<?phpdeclare(strict_types=1);function addition(int $a, int $b): int {    return $a + $b;}echo addition(3, 5);    // 8// echo addition(3, "5"); // TypeError en mode strict !

Conseil : active toujours declare(strict_types=1) en haut de tes fichiers. Ça t'évitera des bugs subtils et te donnera de bonnes habitudes.

Vérifier le type d'une variable

<?php$valeur = 42;echo gettype($valeur);    // integervar_dump($valeur);        // int(42)// Fonctions de vérificationis_string($valeur);  // falseis_int($valeur);     // trueis_array($valeur);   // falseisset($valeur);      // true (la variable existe et n'est pas null)

Les structures de contrôle

C'est ici que ton code commence à prendre des décisions.

if / else / elseif

<?phpdeclare(strict_types=1);$note = 15;if ($note >= 16) {    echo "Très bien !";} elseif ($note >= 12) {    echo "Bien.";} elseif ($note >= 10) {    echo "Passable.";} else {    echo "Insuffisant.";}

L'opérateur ternaire

Pour les conditions simples, le ternaire est plus concis :

<?php$age = 20;$statut = ($age >= 18) ? 'majeur' : 'mineur';echo $statut; // majeur// Opérateur null coalescent (très utile)$nom = $_GET['nom'] ?? 'Visiteur';echo "Bonjour, $nom"; // Bonjour, Visiteur (si pas de paramètre GET)

match : le switch moderne (PHP 8.0+)

Oublie switch. Utilise match — c'est plus sûr et plus lisible :

<?phpdeclare(strict_types=1);$codeHttp = 404;$message = match($codeHttp) {    200 => 'Succès',    301 => 'Redirection permanente',    404 => 'Page non trouvée',    500 => 'Erreur serveur',    default => 'Code inconnu',};echo $message; // Page non trouvée

Contrairement à switch, match utilise la comparaison stricte (===), retourne une valeur, et ne nécessite pas de break. C'est la manière moderne d'écrire des conditions multiples en PHP.

Les boucles en PHP

Les boucles permettent de répéter des instructions. PHP en propose quatre types principaux.

for : quand tu connais le nombre d'itérations

<?php// Afficher les nombres de 1 à 10for ($i = 1; $i <= 10; $i++) {    echo $i . " ";}// 1 2 3 4 5 6 7 8 9 10// Table de multiplication$nombre = 7;for ($i = 1; $i <= 10; $i++) {    echo "$nombre x $i = " . ($nombre * $i) . "
";}

foreach : la star de PHP

foreach est la boucle que tu utiliseras le plus. Elle parcourt les tableaux naturellement :

<?php$fruits = ['pomme', 'banane', 'cerise', 'datte'];// Parcourir les valeursforeach ($fruits as $fruit) {    echo strtoupper($fruit) . "
";}// Parcourir clés et valeurs$prix = ['pomme' => 1.50, 'banane' => 0.80, 'cerise' => 3.20];foreach ($prix as $fruit => $tarif) {    echo "$fruit : {$tarif}€
";}// pomme : 1.5€// banane : 0.8€// cerise : 3.2€

while et do...while

<?php// while : vérifie la condition AVANT$tentatives = 0;$motDePasse = '';while ($motDePasse !== 'secret' && $tentatives < 3) {    $motDePasse = readline('Mot de passe : ');    $tentatives++;}// do...while : exécute AU MOINS une fois$nombre = 0;do {    echo "Nombre : $nombre
";    $nombre += 2;} while ($nombre <= 10);

break et continue

<?php$nombres = [3, 7, 12, 5, 18, 2, 9];foreach ($nombres as $n) {    if ($n > 15) {        break; // Arrête la boucle complètement    }    if ($n % 2 === 0) {        continue; // Saute les nombres pairs    }    echo "$n "; // 3 7 5}

Les fonctions

Les fonctions structurent ton code et le rendent réutilisable. En PHP moderne, tu peux (et tu devrais) typer les paramètres et le retour.

Déclarer une fonction

<?phpdeclare(strict_types=1);function calculerTTC(float $prixHT, float $tva = 0.20): float {    return $prixHT * (1 + $tva);}echo calculerTTC(100);       // 120echo calculerTTC(100, 0.055); // 105.5 (TVA réduite)

Fonctions avec tableaux

<?phpdeclare(strict_types=1);function filtrerMajeurs(array $personnes): array {    $majeurs = [];    foreach ($personnes as $personne) {        if ($personne['age'] >= 18) {            $majeurs[] = $personne;        }    }    return $majeurs;}$personnes = [    ['nom' => 'Alice', 'age' => 25],    ['nom' => 'Bob', 'age' => 16],    ['nom' => 'Charlie', 'age' => 30],    ['nom' => 'Diane', 'age' => 14],];$majeurs = filtrerMajeurs($personnes);// Résultat : Alice (25) et Charlie (30)

Fonctions fléchées (PHP 7.4+)

Pour les fonctions courtes à une seule expression :

<?php$nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];// Filtrer les pairs avec une fonction fléchée$pairs = array_filter($nombres, fn(int $n): bool => $n % 2 === 0);// [2, 4, 6, 8, 10]// Transformer avec array_map$doubles = array_map(fn(int $n): int => $n * 2, $nombres);// [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]// Réduire avec array_reduce$somme = array_reduce($nombres, fn(int $acc, int $n): int => $acc + $n, 0);echo $somme; // 55

Les fonctions fléchées capturent automatiquement les variables du scope parent, contrairement aux closures classiques qui nécessitent use.

Union types et types nullables

<?phpdeclare(strict_types=1);// Type nullable : peut retourner string ou nullfunction trouverUtilisateur(int $id): ?string {    $users = [1 => 'Ahmed', 2 => 'Marie', 3 => 'Karim'];    return $users[$id] ?? null;}// Union type (PHP 8.0) : accepte int ou stringfunction afficherId(int|string $id): string {    return "ID: $id";}echo trouverUtilisateur(1);  // Ahmedecho trouverUtilisateur(99); // null (rien ne s'affiche)echo afficherId(42);         // ID: 42echo afficherId('ABC-12');   // ID: ABC-12

Ton premier projet : formulaire de contact

Assez de théorie. Construisons quelque chose de concret : un formulaire de contact fonctionnel en HTML + PHP. C'est le projet classique par excellence pour un débutant, et c'est exactement le genre de chose qu'on te demandera en entretien.

Le formulaire HTML (contact.php)

<!DOCTYPE html><html lang="fr"><head>    <meta charset="UTF-8">    <title>Formulaire de contact</title>    <style>        body { font-family: Arial, sans-serif; max-width: 600px; margin: 40px auto; }        label { display: block; margin-top: 15px; font-weight: bold; }        input, textarea { width: 100%; padding: 8px; margin-top: 5px; }        button { margin-top: 20px; padding: 10px 30px; background: #4F46E5; color: white; border: none; cursor: pointer; }        .erreur { color: #DC2626; }        .succes { color: #16A34A; background: #F0FDF4; padding: 15px; border-radius: 5px; }    </style></head><body><h1>Contacte-nous</h1><?phpdeclare(strict_types=1);$erreurs = [];$succes = false;if ($_SERVER['REQUEST_METHOD'] === 'POST') {    // Récupérer et nettoyer les données    $nom = trim(htmlspecialchars($_POST['nom'] ?? ''));    $email = trim($_POST['email'] ?? '');    $message = trim(htmlspecialchars($_POST['message'] ?? ''));    // Validation    if (strlen($nom) < 2) {        $erreurs[] = 'Le nom doit contenir au moins 2 caractères.';    }    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {        $erreurs[] = 'Adresse email invalide.';    }    if (strlen($message) < 10) {        $erreurs[] = 'Le message doit contenir au moins 10 caractères.';    }    // Si pas d'erreur, traiter le formulaire    if (empty($erreurs)) {        // En production : envoyer un email avec mail() ou un service comme SendGrid        $logEntry = sprintf(            "[%s] Nom: %s | Email: %s | Message: %s
",            date('Y-m-d H:i:s'),            $nom,            $email,            $message        );        file_put_contents('contacts.log', $logEntry, FILE_APPEND);        $succes = true;    }}?><?php if ($succes): ?>    <div class="succes">        <strong>Message envoyé !</strong> Merci, nous te répondrons rapidement.    </div><?php else: ?>    <?php if (!empty($erreurs)): ?>        <div class="erreur">            <ul>            <?php foreach ($erreurs as $erreur): ?>                <li><?php echo $erreur; ?></li>            <?php endforeach; ?>            </ul>        </div>    <?php endif; ?>    <form method="POST" action="">        <label for="nom">Nom</label>        <input type="text" id="nom" name="nom" value="<?php echo $nom ?? ''; ?>" required>        <label for="email">Email</label>        <input type="email" id="email" name="email" value="<?php echo $email ?? ''; ?>" required>        <label for="message">Message</label>        <textarea id="message" name="message" rows="5" required><?php echo $message ?? ''; ?></textarea>        <button type="submit">Envoyer</button>    </form><?php endif; ?></body></html>

Ce que tu apprends avec ce projet

C'est un petit projet, mais il touche à des concepts fondamentaux que tu retrouveras dans tous tes futurs développements PHP.

Roadmap : de débutant à professionnel

Apprendre PHP ne se fait pas en une semaine, mais avec un plan structuré, tu peux devenir opérationnel en quelques mois. Voici un parcours réaliste :

Mois 1-2 : Les fondamentaux

Mois 3-4 : Programmation Orientée Objet

Mois 5-6 : Framework et bonnes pratiques

Mois 7-9 : Projets et spécialisation

Mois 10-12 : Professionnalisation

Combien de temps pour apprendre PHP ? Avec 1 à 2 heures par jour, tu peux être opérationnel pour un premier emploi ou des missions freelance en 6 à 9 mois. La clé : coder tous les jours, même 30 minutes.

Récapitulatif

Voici les points essentiels à retenir de ce guide :

Pour aller plus loin

Tu as lu ce guide jusqu'au bout ? Bien. Maintenant, le plus important : passe à la pratique. La théorie sans code, c'est comme lire un livre de natation sans jamais aller à la piscine.

Sur GoGoKodo, tu peux t'entraîner directement dans ton navigateur avec nos ateliers interactifs PHP. Chaque exercice est corrigé automatiquement, tu progresses étape par étape, et tu écris du vrai code — pas du QCM.

Voici les ressources pour continuer :

PHP n'est pas mort. Il évolue, il s'améliore, et il continue de faire tourner la majorité du web. En l'apprenant en 2026, tu fais un choix pragmatique pour ta carrière. Lance-toi.