Beetje Coderen

Les 3

Variabelen, typen en operatoren

$variabelen, typen en strict_types.

⏱ 45–60 minuten leestijd + oefenen

🎯 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: $naam en $Naam zijn twee verschillende variabelen.
  • In PHP is camelCase ($isStudent) gebruikelijk; in Python schreef je is_student.
  • echo mag meerdere waarden krijgen, gescheiden door komma's. Anders dan print in 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 / 2 is 3.5. Gehele deling doe je met intdiv(7, 2) (dat geeft 3).
  • 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

  1. Maak fooi.php met declare(strict_types=1); bovenaan.
  2. Bereken voor $bedrag = 64.80 en $fooiProcent = 15 de fooi en het totaal.
  3. Toon beide bedragen met number_format als Fooi: € 9,72 en Totaal: € 74,52.
  4. 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

Volg daarna de stappen van de opdracht hierboven. Nog geen Docker? Zie les 14 van Een beetje Linux & Docker. Voor dit lab is er geen live lab in de browser.

Klaar? Controleer je werk met:

$ beetje check php-les3

📝 Quiz: variabelen, typen en operatoren

5 vragen · 70% nodig om te slagen

1. Wat is de uitvoer van echo "3" . "4";
2. Wat is de uitvoer van echo "3" + "4";
3. $naam = 'Sam'; Wat toont echo 'Hoi $naam';
4. Welke functie toont zowel het type als de waarde?
5. Wat doet declare(strict_types=1)?