๐Ÿ”€

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 zonder break
  • match โ€” 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 โ†’