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 :
!(NOT)&&(AND)||(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
-
Conditions de base
- Créez des conditions if/else pour différents scénarios
- Testez avec différentes valeurs
- Utilisez l'expression ternaire
-
Switch
- Créez un switch pour gérer différents cas
- Testez le match expression (si PHP 8+)
- Comparez switch vs if/elseif
-
Opérateurs logiques
- Créez des conditions complexes avec &&, ||, !
- Utilisez des parenthèses pour clarifier
- Testez tous les opérateurs
-
Comparaisons
- Testez == vs ===
- Utilisez le spaceship operator
- Comprenez les différences
-
Cas pratique
- Créez un système de validation de formulaire
- Gère plusieurs champs avec conditions
- Affichez les erreurs appropriées
Quiz
-
Quelle est la différence entre == et === ?
- Aucune différence
- === compare aussi le type
- == est plus rapide
-
Que fait l'opérateur ?? ?
- Compare deux valeurs
- Null coalescing : valeur par défaut si null
- Multiplie par deux
-
Que retourne match() en PHP 8+ ?
- true/false
- Une valeur selon le cas
- Rien
-
Quelle est la priorité entre && et || ?
- || en premier
- && en premier
- Même priorité
-
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 :
- Fonction
verifierAcces($role, $age, $verifie, $abonne, $section) - Retourne true/false selon les critères
- Gère tous les cas avec conditions claires
- 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.