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; // AhmedCe 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 :
- Tu veux créer des sites web et applications web (ton objectif principal)
- Tu vises le freelancing (WordPress, Shopify, PrestaShop)
- Tu veux un langage avec un accès rapide à l'emploi en France
- Tu t'intéresses à Laravel ou Symfony
Choisis Python si :
- Tu vises la data science, le machine learning ou l'IA
- Tu veux faire de l'automatisation et du scripting
- Tu t'orientes vers la recherche scientifique
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
- Télécharge XAMPP sur apachefriends.org (Windows, Mac, Linux)
- Installe-le avec les options par défaut
- Lance le panneau de contrôle XAMPP
- Démarre Apache
- Place tes fichiers dans le dossier
htdocs - Ouvre
http://localhostdans 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-apacheMais 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: balise d'ouverture, obligatoire. Elle dit au serveur "ce qui suit est du PHP"echo: affiche du texte (ou du HTML) dans le navigateur- Chaque instruction se termine par un point-virgule
; //: commentaire sur une ligne (ignoré par PHP)
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]; // PHPTypage 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éeContrairement à 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; // 55Les 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-12Ton 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
- Superglobales :
$_POSTet$_SERVERpour récupérer les données du formulaire - Validation : vérifier les entrées utilisateur (ne jamais faire confiance aux données reçues)
- Sécurité :
htmlspecialchars()pour empêcher les injections XSS - filter_var : validation d'email intégrée à PHP
- Écriture fichier :
file_put_contents()avec le flagFILE_APPEND - Syntaxe alternative :
if/endif,foreach/endforeachpour le templating
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
- Variables, types, opérateurs
- Structures de contrôle et boucles
- Fonctions et portée des variables
- Tableaux et manipulation de chaînes
- Formulaires et superglobales (
$_GET,$_POST,$_SESSION) - Lire la documentation officielle PHP régulièrement
Mois 3-4 : Programmation Orientée Objet
- Classes, propriétés, méthodes
- Héritage, interfaces, traits
- Namespaces et autoloading (PSR-4)
- Composer (gestionnaire de dépendances)
- Bases de données avec PDO (pas mysqli)
Mois 5-6 : Framework et bonnes pratiques
- Choisis un framework : Laravel (recommandé) ou Symfony
- Architecture MVC
- ORM (Eloquent ou Doctrine)
- Tests unitaires avec PHPUnit
- Consulte PHP The Right Way pour les bonnes pratiques
Mois 7-9 : Projets et spécialisation
- Construis 2-3 projets personnels complets
- API REST avec Laravel
- Authentification, middleware, queues
- Déploiement (Forge, VPS, Docker)
- Découvre les nouveautés PHP 8.4
Mois 10-12 : Professionnalisation
- Contribue à un projet open source
- Crée ton portfolio avec tes projets
- Prépare tes entretiens techniques
- Postule ou lance-toi en freelance
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 :
- PHP propulse 78% du web et reste l'un des langages backend les plus demandés en France
- Le marché de l'emploi est solide : 32k à 65k+ euros selon l'expérience
- PHP 8.x est un langage moderne avec enums, typage strict, match, union types et propriétés readonly
- XAMPP est la manière la plus simple de démarrer — en 5 minutes tu exécutes du PHP
- Active toujours
declare(strict_types=1)pour éviter les bugs de typage - Utilise
matchplutôt queswitch,foreachplutôt queforquand c'est possible - Type tes fonctions : paramètres ET retour. C'est la base du PHP professionnel
- Ne fais jamais confiance aux données utilisateur : valide et échappe systématiquement
- Apprends la POO dès que les bases sont solides, puis passe à Laravel
- La régularité bat l'intensité : 30 minutes par jour > 5 heures le dimanche
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 :
- Documentation officielle PHP — ta référence quotidienne
- PHP The Right Way — les bonnes pratiques de la communauté
- Nouveautés PHP 8.4 — reste à jour sur les dernières fonctionnalités
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.