Capitol gratuit

Structuri de control - if, switch, match

Structurile de control determină fluxul execuției programului. PHP oferă structuri clasice (if, switch) și moderne (match), plus operatori ternari pentru c...

Introducere

Structurile de control determină fluxul execuției programului. PHP oferă structuri clasice (if, switch) și moderne (match), plus operatori ternari pentru condiții scurte.

if / elseif / else

<?php
$nota = 8.5;

if ($nota >= 9) {
$calificativ = "Excelent";
} elseif ($nota >= 7) {
$calificativ = "Bine";
} elseif ($nota >= 5) {
$calificativ = "Satisfăcător";
} else {
$calificativ = "Nesatisfăcător";
}

echo $calificativ;  // "Bine"

// Condiții multiple
$varsta = 25;
$permis = true;

if ($varsta >= 18 && $permis) {
echo "Poate conduce";
}

if ($varsta < 18 || !$permis) {
echo "Nu poate conduce";
}

Operatorul ternar

<?php
// Ternar clasic
$status = ($varsta >= 18) ? 'adult' : 'minor';

// Ternar scurt (Elvis operator)
$nume = $input ?: 'Anonim';   // Dacă $input e falsy, returnează 'Anonim'

// Null coalescing (diferit de ternar!)
$user = $data['user'] ?? 'Necunoscut';   // Doar dacă e null/inexistent

switch

<?php
$zi = date('l');   // Numele zilei în engleză

switch ($zi) {
case 'Monday':
echo "Începutul săptămânii";
break;
case 'Friday':
echo "Vineri! Weekend aproape";
break;
case 'Saturday':
case 'Sunday':
echo "Weekend!";
break;
default:
echo "Zi obișnuită";
break;
}

match (PHP 8.0+)

match este versiunea modernă a switch - mai sigură (comparare strictă), mai concisă și returnează o valoare:

<?php
$statusCode = 404;

$mesaj = match ($statusCode) {
200 => 'OK',
301 => 'Moved Permanently',
404 => 'Not Found',
500 => 'Internal Server Error',
default => 'Unknown Status',
};

echo $mesaj;  // "Not Found"

// Match cu condiții multiple
$luna = 3;
$anotimp = match (true) {
$luna >= 3 && $luna <= 5 => 'Primăvară',
$luna >= 6 && $luna <= 8 => 'Vară',
$luna >= 9 && $luna <= 11 => 'Toamnă',
default => 'Iarnă',
};

// Match cu valori multiple
$zi = 'Luni';
$tip = match ($zi) {
'Luni', 'Marți', 'Miercuri', 'Joi', 'Vineri' => 'Zi lucrătoare',
'Sâmbătă', 'Duminică' => 'Weekend',
};
✓ match (PHP 8+)
Comparare strictă (===)
Returnează o valoare
Nu necesită break
Aruncă eroare dacă nu se potrivește nimic
Cod concis
✗ switch (clasic)
Comparare liberă (==)
Nu returnează valoare
Necesită break (fall-through bugs)
Default opțional (silent fail)
Cod mai verbose
🎯 Recomandare: Folosiți match în PHP 8+ ori de câte ori este posibil. Este mai sigur, mai curat și evită bug-urile clasice de switch (break uitat, comparare liberă).

Continuați cu restul cursului

Acesta este capitolul 3 din cele 20 ale cursului, cu 5 lecții din 102. Cumpărați cursul și parcurgeți tot conținutul în cont, cu progres salvat, test final și certificat.

Cumpărați cursul la 110 €