MODULE 01

PHP — Les Bases

Variables, types, opĂ©rateurs, conditions et boucles — le socle de tout script PHP.

1 Introduction Ă  PHP

PHP (Hypertext Preprocessor) est un langage cĂŽtĂ© serveur exĂ©cutĂ© par un serveur web (Apache, Nginx) ou via la CLI. Le fichier est traitĂ© par l'interprĂ©teur PHP avant d'ĂȘtre envoyĂ© au navigateur.

💡 Pour lancer un serveur de dĂ©veloppement sans XAMPP : php -S localhost:8000 dans le dossier du projet.

Balises PHP

<?php
// Balise d'ouverture recommandée
echo "Bonjour, monde !";

// Balise courte d'affichage (active par défaut en PHP 5.4+)
// <?= "valeur" ?>

// Dans un fichier HTML
?>
<p>Résultat : <?= htmlspecialchars($variable) ?></p>

Commentaires

<?php
// Commentaire sur une ligne
# Aussi valide (style shell)

/*
  Commentaire
  sur plusieurs lignes
*/

echo "PHP " . PHP_VERSION; // concaténation avec le point
💡 Ne jamais inclure la balise de fermeture ?> dans un fichier PHP pur — cela Ă©vite les problĂšmes d'espaces blancs parasites avant les headers HTTP.

2 Variables & Types

En PHP, toute variable commence par $. PHP est typé dynamiquement : le type est inféré automatiquement. PHP 8 ajoute un typage strict optionnel.

<?php
// DĂ©claration — le type est implicite
$nom      = "Alice";        // string
$age      = 30;             // int
$taille   = 1.75;           // float (double)
$estActif = true;           // bool
$rien     = null;           // NULL

// Vérifier le type
echo gettype($nom);         // string
echo gettype($age);         // integer
echo gettype($taille);      // double (alias float)

// Inspecter type + valeur
var_dump($estActif);        // bool(true)
var_dump($rien);            // NULL
print_r([1, 2, 3]);         // Affichage lisible des tableaux

Casting explicite

<?php
$str = "42";
$num = (int) $str;     // cast en entier → 42
$flt = (float) $str;   // cast en float  → 42.0
$boo = (bool) $str;    // cast en bool   → true (car non vide)

// intval, floatval, strval — fonctions alternatives
$n = intval("3.7");    // 3 (troncature)

Constantes

<?php
// define() — Ă©valuĂ©e Ă  l'exĂ©cution
define('VERSION', '1.0.0');
define('MAX_USERS', 100);

// const — Ă©valuĂ©e Ă  la compilation, utilisable dans les classes
const BASE_URL = 'https://example.com';

echo VERSION;     // 1.0.0 (pas de $ pour les constantes)
echo PHP_EOL;     // Constante PHP prédéfinie : fin de ligne
⚠ == effectue une coercition de type : "1" == 1 est true. Toujours utiliser === pour comparer valeur ET type.

3 Opérateurs

Arithmétiques

<?php
echo 10 + 3;   // 13
echo 10 - 3;   // 7
echo 10 * 3;   // 30
echo 10 / 3;   // 3.333...
echo 10 % 3;   // 1  (modulo)
echo 2 ** 8;   // 256 (puissance, PHP 5.6+)

Comparaison

<?php
var_dump(1 == "1");   // true  (coercition)
var_dump(1 === "1");  // false (types différents)
var_dump(1 != "2");   // true
var_dump(1 !== "1");  // true  (valeur ou type différent)

// Spaceship operator PHP 7+ : -1, 0, 1
echo 1 <=> 2;   // -1
echo 2 <=> 2;   //  0
echo 3 <=> 2;   //  1

Ternaire & Null Coalescent

<?php
$age = 20;
$statut = $age >= 18 ? 'majeur' : 'mineur';
echo $statut; // majeur

// Null coalescent ?? (PHP 7+)
$prenom = $_GET['prenom'] ?? 'Inconnu';
// Équivalent à : isset($_GET['prenom']) ? $_GET['prenom'] : 'Inconnu'

// Null coalescent affectation ??= (PHP 7.4+)
$config['timeout'] ??= 30; // assigne 30 seulement si null

4 Conditions

if / elseif / else

<?php
$note = 75;

if ($note >= 90) {
    echo "Excellent";
} elseif ($note >= 70) {
    echo "Bien";           // ← sera affichĂ©
} elseif ($note >= 50) {
    echo "Passable";
} else {
    echo "Insuffisant";
}

switch

<?php
$jour = 'lundi';

switch ($jour) {
    case 'lundi':
    case 'mardi':
        echo "Début de semaine";
        break;
    case 'vendredi':
        echo "TGIF !";
        break;
    default:
        echo "Milieu de semaine";
}

match — PHP 8 (comparaison stricte)

<?php
$statut = 2;

// match utilise === (pas de coercition de type)
$label = match($statut) {
    0       => 'Brouillon',
    1       => 'Publié',
    2, 3    => 'Archivé',  // plusieurs valeurs possibles
    default => 'Inconnu',  // obligatoire si aucun bras ne correspond
};
echo $label; // Archivé

// match SANS default → UnhandledMatchError si aucune correspondance
💡 match est plus strict et plus concis que switch. PrĂ©fĂ©rez-le en PHP 8 pour les correspondances simples avec retour de valeur.

5 Boucles

for

<?php
for ($i = 1; $i <= 5; $i++) {
    echo $i . " "; // 1 2 3 4 5
}

while & do-while

<?php
$n = 1;
while ($n <= 3) {
    echo $n++;     // 1 2 3
}

// do-while : s'exécute AU MOINS une fois
$x = 10;
do {
    echo $x;       // affiche 10 mĂȘme si condition fausse d'emblĂ©e
    $x++;
} while ($x < 5);

foreach — le plus utilisĂ© pour les tableaux

<?php
$fruits = ['pomme', 'banane', 'cerise'];
foreach ($fruits as $fruit) {
    echo $fruit . "\n";
}

// Tableau associatif : clé => valeur
$personne = ['nom' => 'Alice', 'age' => 30, 'ville' => 'Paris'];
foreach ($personne as $cle => $valeur) {
    echo "$cle : $valeur\n";
}

// Modifier par référence
foreach ($fruits as &$f) {
    $f = strtoupper($f); // POMME, BANANE, CERISE
}
unset($f); // IMPORTANT : libérer la référence aprÚs la boucle

break & continue

<?php
for ($i = 0; $i < 10; $i++) {
    if ($i === 3) continue; // passer 3
    if ($i === 6) break;    // arrĂȘter Ă  6
    echo $i . " ";          // 0 1 2 4 5
}

6 Récapitulatif

Balise ouverture + affichage. Ne jamais oublier ?> avant HTML.

$var / gettype

Variables avec $, gettype() ou var_dump() pour inspecter.

=== strict

Toujours préférer === à == pour éviter les coercitions surprises.

match (PHP 8)

Remplace switch avec comparaison stricte et retour de valeur obligatoire.

?? coalescent

Lecture sécurisée des superglobales : $_GET['key'] ?? 'défaut'.

foreach

Boucle native sur tableaux, arrays associatifs et objets itérables.