Les 3
Variabelen, typen en operatoren
$variabelen, typen en strict_types.
🎯 Na deze les kun je
- variabelen en typen in PHP gebruiken
- strings samenvoegen en interpoleren
- strict_types aanzetten en uitleggen
Variabelen ken je uit de hoofdcursus: een naam die naar een waarde verwijst. In PHP is het idee hetzelfde, maar de schrijfwijze en een paar regels zijn anders. Het belangrijkste verschil: PHP zet waarden soms stilletjes om naar een ander type. Dat is handig, maar ook een bron van rare bugs. In deze les leer je hoe je dat in de hand houdt met strict_types.
Variabelen beginnen met $
<?php
$naam = "Sam";
$leeftijd = 17;
$lengte = 1.82;
$isStudent = true;
echo $naam, " is ", $leeftijd, " jaar.\n";
Sam is 17 jaar.
- Elke variabele begint met
$. Zonder$denkt PHP dat je een constante of functie bedoelt. - Namen zijn hoofdlettergevoelig:
$naamen$Naamzijn twee verschillende variabelen. - In PHP is camelCase (
$isStudent) gebruikelijk; in Python schreef jeis_student. echomag meerdere waarden krijgen, gescheiden door komma's. Anders danprintin Python zet hij er geen spatie tussen.
Typen
| Voorbeeld | PHP-type | In Python |
|---|---|---|
"Sam" of 'Sam' |
string |
str |
17 |
int |
int |
1.82 |
float |
float |
true / false |
bool |
True / False |
null |
null |
None |
[1, 2, 3] |
array |
list / dict (les 5) |
Het type opvragen doe je met var_dump(). Die laat type én waarde zien en is je beste vriend bij debuggen:
var_dump(17); // int(17)
var_dump("17"); // string(2) "17"
var_dump(1.5 * 2); // float(3)
var_dump(null); // NULL
Rekenen en strings samenvoegen
De rekenoperatoren zijn bijna gelijk aan Python: + - * / % en ** voor machtsverheffen. Twee verschillen:
/geeft altijd het "echte" resultaat:7 / 2is3.5. Gehele deling doe je metintdiv(7, 2)(dat geeft3).- Strings plak je aan elkaar met een punt
., niet met+.
$voornaam = "Sam";
$achternaam = "de Vries";
$volledig = $voornaam . " " . $achternaam;
echo $volledig . "\n"; // Sam de Vries
$teller = 1;
$teller += 1; // 2
$tekst = "Hallo";
$tekst .= "!"; // "Hallo!"
"3" + "4" geeft in PHP 7 (een getal), want + rekent altijd. "3" . "4" geeft "34". In Python is het precies andersom: daar plakt + strings aan elkaar. Dit gaat in het begin vaak mis.
Enkele en dubbele aanhalingstekens
In PHP maakt het uit welke aanhalingstekens je gebruikt:
$naam = "Sam";
echo "Hallo $naam\n"; // Hallo Sam (variabele wordt ingevuld)
echo 'Hallo $naam\n'; // Hallo $naam\n (letterlijk)
Tussen dubbele aanhalingstekens vult PHP variabelen in (interpolatie) en snapt het \n. Tussen enkele aanhalingstekens staat alles letterlijk. Dat is vergelijkbaar met een f-string in Python versus een gewone string.
Bij ingewikkeldere uitdrukkingen zet je accolades om de variabele:
$product = "koffie";
echo "Twee {$product}s graag.\n"; // Twee koffies graag.
Zonder accolades zou PHP zoeken naar een variabele $products.
Getallen netjes tonen
Voor bedragen gebruik je number_format() of sprintf():
$totaal = 46.75;
echo "Te betalen: € " . number_format($totaal, 2, ',', '.') . "\n"; // € 46,75
echo sprintf("Te betalen: € %.2f\n", $totaal); // € 46.75
number_format kent een Nederlandse komma; sprintf werkt zoals :.2f in een f-string.
Uitgewerkt voorbeeld: fooi berekenen
Voorspel de uitvoer voordat je verder leest.
<?php
$bedrag = 42.50;
$fooiProcent = 10;
$fooi = $bedrag * $fooiProcent / 100;
$totaal = $bedrag + $fooi;
echo "Fooi: € " . number_format($fooi, 2, ',', '.') . "\n";
echo "Totaal: € " . number_format($totaal, 2, ',', '.') . "\n";
Fooi: € 4,25
Totaal: € 46,75
Hetzelfde programma als in les 1 van de hoofdcursus. Alleen de $, de puntkomma's en de punt als plakteken zijn nieuw.
Typejongleren en strict_types
PHP probeert typen om te zetten als dat nodig lijkt (type juggling):
var_dump("5" * 2); // int(10)
var_dump("5 euro" + 1); // int(6), met een Warning: A non-numeric value...
Vooral bij functies kan dat fouten verstoppen. Zet daarom bovenaan elk bestand:
<?php
declare(strict_types=1);
Dan accepteren functies met typedeclaraties (les 6) alleen het juiste type. Een ingebouwde functie als strlen geeft dan bijvoorbeeld een TypeError als je er een getal in stopt, in plaats van het stilletjes om te zetten:
<?php
declare(strict_types=1);
echo strlen(12345);
PHP Fatal error: Uncaught TypeError: strlen(): Argument #1 ($string) must be of type string, int given
Een fout die je meteen ziet, is beter dan een verkeerde uitkomst die je pas veel later opmerkt. In deze cursus beginnen alle bestanden vanaf nu met declare(strict_types=1);.
strict_types geldt per bestand, en moet de allereerste opdracht na <?php zijn. Rekenen met + en . blijft gewoon omzetten; het gaat om de argumenten van functies.
Typische fouten
| Melding | Oorzaak |
|---|---|
Warning: Undefined variable $totaal |
Tikfout in de naam, of de variabele bestaat nog niet. Let op hoofdletters. |
Unsupported operand types: string + ... of een rare som |
Je gebruikte + om strings te plakken; dat moet . zijn. |
syntax error, unexpected identifier "naam" |
Je vergat de $ voor een variabele. |
Oefeningen
Oefening 1. Wat is de uitvoer?
$a = "10";
$b = 5;
echo $a + $b, "\n";
echo $a . $b, "\n";
Modelantwoord oefening 1
15
105
+ rekent, dus "10" wordt het getal 10. . plakt tekst aan elkaar, dus 5 wordt "5".
Oefening 2. Schrijf een script dat met $naam = "Noor" en $punten = 87 deze zin toont, met interpolatie: Noor heeft 87 punten.
Modelantwoord oefening 2
<?php
declare(strict_types=1);
$naam = "Noor";
$punten = 87;
echo "$naam heeft $punten punten.\n";
Oefening 3. Een pizza van € 12,95 wordt gedeeld door 3 personen. Laat het bedrag per persoon zien met twee decimalen en een komma.
Modelantwoord oefening 3
<?php
declare(strict_types=1);
$prijs = 12.95;
$personen = 3;
$perPersoon = $prijs / $personen;
echo "Per persoon: € " . number_format($perPersoon, 2, ',', '.') . "\n";
Per persoon: € 4,32
Lab: fooi-calculator in PHP
- Maak
fooi.phpmetdeclare(strict_types=1);bovenaan. - Bereken voor
$bedrag = 64.80en$fooiProcent = 15de fooi en het totaal. - Toon beide bedragen met
number_formatalsFooi: € 9,72enTotaal: € 74,52. beetje check php-les3
Samenvatting
- Variabelen beginnen met
$en zijn hoofdlettergevoelig. - Strings plak je aan elkaar met
.;+rekent altijd. - Dubbele aanhalingstekens vullen variabelen in, enkele niet.
var_dump()toont type en waarde.declare(strict_types=1);voorkomt stille typeconversies bij functieaanroepen.
Volgende les: keuzes en lussen, en het verschil tussen == en ===.
Lab
Fooi-calculator in PHP
💻 Dit lab doe je op je eigen computer met Docker. Start de lab-container met (geeft de opdracht een eigen startcommando, gebruik dan dat):
$ docker run -it --rm registry.wizg.it/webhosting/beetje-labs:php-les3
Klaar? Controleer je werk met:
$ beetje check php-les3