PHP ยท Les 3
Voorwaarden
if/elseif/else, == vs ===, switch, ternary en ?? ยท 20 min
if / else
<?php
$score = 6.5;
if ($score >= 5.5) {
echo "Geslaagd!\n";
} else {
echo "Helaas gezakt.\n";
}
// Accolades kun je weglaten bij รฉรฉn statement โ maar liever niet
if ($score > 9)
echo "Uitstekend!\n";
Vergelijkingsoperatoren
== โ gelijk (los type)=== โ strikt gelijk (type + waarde)!= โ ongelijk!== โ strikt ongelijk< / > โ kleiner/groter<= / >= โ kleiner/groter of gelijk<=> โ spaceship: -1, 0 of 1โ ๏ธ Let op verschil met JS
De if/else-syntax is identiek aan JavaScript. Het grote verschil zit bij == vs === โ zie stap 3.
elseif
<?php
$score = 7.8;
if ($score >= 9) {
$label = "Uitstekend";
} elseif ($score >= 7.5) {
$label = "Goed";
} elseif ($score >= 5.5) {
$label = "Voldoende";
} else {
$label = "Onvoldoende";
}
echo "Score $score: $label\n";
Logische operatoren
<?php
$leeftijd = 20;
$lidmaatschap = true;
// AND โ beide waar
if ($leeftijd >= 18 && $lidmaatschap) {
echo "Toegang verleend\n";
}
// OR โ minstens รฉรฉn waar
if ($leeftijd < 12 || $leeftijd > 65) {
echo "Korting!\n";
}
// NOT
if (!$lidmaatschap) {
echo "Geen lid\n";
}
โ ๏ธ Let op verschil met JS
In JS schrijf je else if (twee woorden). In PHP is het elseif (รฉรฉn woord). Beide werken in PHP, maar elseif is de PHP-conventie.
== vs === (het grootste PHP-valkuil)
<?php
// == losse vergelijking (type juggling toegestaan)
var_dump("5" == 5); // bool(true) โ string wordt int!
var_dump(0 == "a"); // bool(true) โ GEVAARLIJK in PHP < 8
var_dump("" == false); // bool(true)
var_dump(null == false); // bool(true)
// === strikte vergelijking (type en waarde moeten kloppen)
var_dump("5" === 5); // bool(false) โ string โ int
var_dump(0 === false); // bool(false)
var_dump(null === false); // bool(false)
// Gebruik altijd === tenzij je bewust type-jugglt
$invoer = "5";
if ($invoer === 5) {
echo "Strikt gelijk";
} else {
echo "Niet strikt gelijk โ invoer is een string!\n";
}
Vuistregel
Gebruik altijd === tenzij je een specifieke reden hebt voor losse vergelijking. In Symfony-code zie je vrijwel altijd ===.
โ ๏ธ Let op verschil met JS
Het concept is hetzelfde als in JS: gebruik === voor veilige vergelijkingen. Maar PHP's == gedraagt zich in sommige gevallen anders dan JS's == โ met name numerieke strings vs. getallen.
switch
<?php
$dag = "maandag";
switch ($dag) {
case "maandag":
case "dinsdag":
case "woensdag":
case "donderdag":
case "vrijdag":
echo "Werkdag\n";
break; // Zonder break valt het door naar het volgende case!
case "zaterdag":
case "zondag":
echo "Weekend\n";
break;
default:
echo "Ongeldige dag\n";
}
// PHP 8: match-expressie โ krachtiger dan switch
$resultaat = match($dag) {
"maandag", "dinsdag", "woensdag", "donderdag", "vrijdag" => "Werkdag",
"zaterdag", "zondag" => "Weekend",
default => "Onbekend",
};
echo $resultaat . "\n";
switch vs match
switchโ gebruikt==(los), valt door zonderbreakmatchโ gebruikt===(strikt), geeft een waarde terug, geen fallthrough- โ In moderne PHP (8+) geef je de voorkeur aan
match
๐ Komt terug in Symfony
In Symfony-controllers gebruik je match regelmatig voor het bepalen van responses op basis van HTTP-methode of status: match($request->getMethod()) { 'GET' => ..., 'POST' => ... }
Ternary en null coalescing (??)
<?php
// Ternary: conditie ? waarde-als-waar : waarde-als-onwaar
$score = 7.2;
$label = $score >= 5.5 ? "Geslaagd" : "Gezakt";
echo $label . "\n"; // Geslaagd
// Elvis-operator ?: (korte ternary)
$naam = "" ?: "Gast"; // Als $naam falsy is, gebruik "Gast"
echo $naam . "\n"; // Gast
// Null coalescing ?? โ controleert op null/undefined
$gebruikersNaam = null;
echo $gebruikersNaam ?? "Anoniem"; // Anoniem
// Ketenen van ??
$a = null;
$b = null;
$c = "gevonden!";
echo $a ?? $b ?? $c ?? "niets"; // gevonden!
// Null coalescing assignment ??=
$config = [];
$config['timeout'] ??= 30; // Stel in als nog niet gezet
echo $config['timeout']; // 30
๐ Komt terug in Symfony
De ?? operator gebruik je constant in Symfony voor optionele request-parameters: $naam = $request->get('naam') ?? 'Gast'; โ als de parameter ontbreekt in de URL, gebruik je een standaardwaarde.
โ ๏ธ Let op verschil met JS
JS heeft ook ?? (nullish coalescing, ES2020). In JS controleert ?? alleen op null/undefined. In PHP controleert ?? ook op null maar niet op andere falsy waarden (dat doet ?:).
Sandbox
Schrijf een cijfer-beoordelaar die een label teruggeeft op basis van de score.
// output
Klik op Uitvoeren...
Kennischeck
Les 3 afronden
Ga door naar loops โ