Aller au contenu principal

Module PHP.5 – Conditions

Objectif

Maîtriser les structures conditionnelles en PHP : if/else, switch, et opérateurs logiques pour contrôler le flux d'exécution.

Théorie

if / else

Structure de base :

if (condition) {
// Code si condition vraie
}

if / else :

if ($age >= 18) {
echo "Majeur";
} else {
echo "Mineur";
}

if / elseif / else :

if ($note >= 16) {
echo "Très bien";
} elseif ($note >= 14) {
echo "Bien";
} elseif ($note >= 12) {
echo "Assez bien";
} else {
echo "À améliorer";
}

Syntaxe alternative :

if ($age >= 18):
echo "Majeur";
else:
echo "Mineur";
endif;

Expression ternaire :

$message = ($age >= 18) ? "Majeur" : "Mineur";

Opérateur null coalescing (PHP 7.0+) :

$nom = $nom ?? "Inconnu";  // Si $nom est null, utilise "Inconnu"
$email = $_POST['email'] ?? $_GET['email'] ?? "aucun";

Opérateur null coalescing assignment (PHP 7.4+) :

$nom ??= "Inconnu";  // Équivalent à $nom = $nom ?? "Inconnu"

switch

Le switch permet de tester une valeur contre plusieurs cas.

Structure :

switch ($variable) {
case valeur1:
// Code
break;
case valeur2:
// Code
break;
default:
// Code par défaut
break;
}

Exemple :

$jour = "lundi";

switch ($jour) {
case "lundi":
case "mardi":
case "mercredi":
case "jeudi":
case "vendredi":
echo "Jour de travail";
break;
case "samedi":
case "dimanche":
echo "Week-end";
break;
default:
echo "Jour invalide";
break;
}

Match expression (PHP 8.0+) :

$resultat = match($note) {
16, 17, 18, 19, 20 => "Très bien",
14, 15 => "Bien",
12, 13 => "Assez bien",
default => "À améliorer"
};

Avantages de match :

  • Retourne une valeur (pas besoin de break)
  • Comparaison stricte (===)
  • Plus moderne et concis

Opérateurs logiques

ET (AND) :

if ($age >= 18 && $estAbonne) {
echo "Accès autorisé";
}

// Alternative
if ($age >= 18 and $estAbonne) {
// Même chose mais priorité différente
}

OU (OR) :

if ($jour == "samedi" || $jour == "dimanche") {
echo "Week-end";
}

// Alternative
if ($jour == "samedi" or $jour == "dimanche") {
// Même chose
}

NON (NOT) :

if (!$estConnecte) {
echo "Veuillez vous connecter";
}

XOR (OU exclusif) :

if ($a xor $b) {
// Vrai si un seul est vrai, pas les deux
}

Priorité des opérateurs :

  1. ! (NOT)
  2. && (AND)
  3. || (OR)

Utilisez des parenthèses pour clarifier :

if (($age >= 18 && $estAbonne) || $estAdmin) {
// Plus clair avec parenthèses
}

Opérateurs de comparaison

Égalité :

==   // Égal (valeur, conversion de type)
=== // Identique (valeur ET type)
!= // Différent
!== // Non identique

Comparaison :

>    // Plus grand
< // Plus petit
>= // Plus grand ou égal
<= // Plus petit ou égal
<=> // Spaceship operator (PHP 7.0+) : -1, 0, ou 1

Spaceship operator :

$resultat = $a <=> $b;
// Retourne -1 si $a < $b
// Retourne 0 si $a == $b
// Retourne 1 si $a > $b

Conditions imbriquées

if ($age >= 18) {
if ($estAbonne) {
if ($compteVerifie) {
echo "Accès premium";
} else {
echo "Vérifiez votre compte";
}
} else {
echo "Abonnez-vous";
}
} else {
echo "Vous devez être majeur";
}

Refactorisation (plus lisible) :

if ($age < 18) {
echo "Vous devez être majeur";
exit;
}

if (!$estAbonne) {
echo "Abonnez-vous";
exit;
}

if (!$compteVerifie) {
echo "Vérifiez votre compte";
exit;
}

echo "Accès premium";

Cas pratiques

Validation de formulaire :

$nom = $_POST['nom'] ?? '';
$email = $_POST['email'] ?? '';

$erreurs = [];

if (empty($nom)) {
$erreurs[] = "Le nom est requis";
}

if (empty($email)) {
$erreurs[] = "L'email est requis";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$erreurs[] = "Email invalide";
}

if (empty($erreurs)) {
echo "Formulaire valide";
} else {
foreach ($erreurs as $erreur) {
echo $erreur . "<br>";
}
}

Gestion d'accès :

$role = $_SESSION['role'] ?? 'visiteur';

if ($role === 'admin') {
// Accès complet
} elseif ($role === 'moderateur') {
// Accès modéré
} elseif ($role === 'utilisateur') {
// Accès limité
} else {
// Accès visiteur
header('Location: login.php');
exit;
}

Exercice

  1. Conditions de base

    • Créez des conditions if/else pour différents scénarios
    • Testez avec différentes valeurs
    • Utilisez l'expression ternaire
  2. Switch

    • Créez un switch pour gérer différents cas
    • Testez le match expression (si PHP 8+)
    • Comparez switch vs if/elseif
  3. Opérateurs logiques

    • Créez des conditions complexes avec &&, ||, !
    • Utilisez des parenthèses pour clarifier
    • Testez tous les opérateurs
  4. Comparaisons

    • Testez == vs ===
    • Utilisez le spaceship operator
    • Comprenez les différences
  5. Cas pratique

    • Créez un système de validation de formulaire
    • Gère plusieurs champs avec conditions
    • Affichez les erreurs appropriées

Quiz

  1. Quelle est la différence entre == et === ?

    • Aucune différence
    • === compare aussi le type
    • == est plus rapide
  2. Que fait l'opérateur ?? ?

    • Compare deux valeurs
    • Null coalescing : valeur par défaut si null
    • Multiplie par deux
  3. Que retourne match() en PHP 8+ ?

    • true/false
    • Une valeur selon le cas
    • Rien
  4. Quelle est la priorité entre && et || ?

    • || en premier
    • && en premier
    • Même priorité
  5. Que fait le spaceship operator <=> ?

    • Compare et retourne -1, 0, ou 1
    • Compare et retourne -1, 0, ou 1
    • Multiplie deux nombres

Mini défi

Mission : Créer un système de gestion d'accès complet

Créez un système qui gère l'accès selon plusieurs critères :

Règles d'accès :

  • Admin : Accès à tout
  • Modérateur : Accès modéré (pas admin)
  • Utilisateur : Accès limité (doit être vérifié)
  • Visiteur : Accès public uniquement

Critères supplémentaires :

  • Age minimum : 13 ans
  • Compte vérifié (pour utilisateur+)
  • Abonnement actif (pour certaines sections)

Fonctionnalités :

  1. Fonction verifierAcces($role, $age, $verifie, $abonne, $section)
  2. Retourne true/false selon les critères
  3. Gère tous les cas avec conditions claires
  4. Messages d'erreur explicites

Sections :

  • "public" : Accessible à tous
  • "membre" : Utilisateur vérifié minimum
  • "premium" : Abonné minimum
  • "moderation" : Modérateur minimum
  • "admin" : Admin uniquement

Critères :

  • ✅ Utilisation de if/elseif/else
  • ✅ Utilisation de switch/match
  • ✅ Opérateurs logiques appropriés
  • ✅ Code clair et lisible
  • ✅ Gestion de tous les cas

Objectif : Maîtriser les conditions complexes et créer une logique d'accès robuste.


Validation : Vous pouvez passer au module suivant quand vous maîtrisez if/else, switch, et les opérateurs logiques.