3. Programmeren

3.1. Variabelen

3.1.1. Wat is variabele?

Het geheugen van een computer wordt wel eens vergeleken met een ladenkast, met laden die een naam kunnen hebben en allerlei inhoud kunnen bevatten. Dit is een goede manier om over variabelen te denken. Een variabele is zo'n lade, met een naam en een inhoud. Verschillende laden kunnen niet dezelfde naam hebben, dat zou verwarring opleveren. Het is echter geen enkel probleem als ze dezelfde inhoud hebben. De naam van een lade zou bijvoorbeeld "plaats" kunnen zijn en de inhoud "Amsterdam". Er is dan een variable die "plaats" heet en de waarde "Amsterdam" heeft. In PHP schrijven we dat zo op:

$plaats = "Amsterdam";

Opmerking: Het $ teken staat altijd voor de naam van een variabele. Het = teken wordt gebruikt om een waarde toe te wijzen; dat wat rechts van het = teken staat wordt toegewezen aan de variabele links van het teken. De " tekens om de waarde heen worden gebruikt om aan te geven dat wat ertussen staat een zogenaamde string is (hier later meer over). Verder wordt in PHP iedere regel afgesloten met ;.

We kunnen altijd een nieuwe lade maken. We kunnen de inhoud van laden veranderen. We kunnen ze kopiëren. De inhoud van een lade kan bij die van een andere gegooid worden. Als de inhoud een getal is dan kunnen we er zelfs mee rekenen!

  • Nieuwe variabele:
    $plaats = "Amsterdam";
    $voornaam = "Piet";
    $achternaam = "Jansen";
    
    Er zijn nu drie variabelen met drie verschillende waarden.
  • Waarde veranderen:
    $plaats = "Amsterdam";
    $plaats = "Rotterdam";
    
    Eerst krijgt de variabele $plaats de waarde "Amsterdam", dit wordt op de tweede regel gewijzigd in "Rotterdam".
  • Waarde kopieren:
    $plaats = "Amsterdam";
    $woonplaats = $plaats;
    
    De waarde van de variabele $plaats wordt op de tweede regel toegekend aan de variabele $woonplaats.
  • Waarden samenvoegen:
    $voornaam = "Piet";
    $achternaam = "Jansen";
    $naam = $voornaam . " " . $achternaam;
    
    De variabele $naam krijgt de waarde "Piet Jansen".
  • Getallen:
    $getal1 = 20;
    $getal2 = 5;
    $uitkomst = $getal1 + $getal2;
    
    De variabele $uitkomst krijgt de waarde 25.

    Tip: In bijna alle programmeertalen, en ook in PHP, wordt optellen gedaan met +, aftrekken met -, vermenigvuldigen met *, delen met / en machtsverheffen met ^.

Opmerking: We zagen in het vorige hoofdstuk al dat met de opdracht echo hetgeen dat erachter staat naar de uitvoer gestuurd wordt. In ons geval betekent dit altijd dat alles wat achter echo staat in de webbrowser terecht komt.

Opmerking: PHP bestanden beginnen altijd met een regel waarop <?php staat. Ze eindigen altijd met een regel waarop ?> staat. Alle andere regels eindigen altijd met ;.

Opdracht 3.1.

  1. Maak in de map phpcursus/ een bestandje op-3-1.php aan en open het in kladblok, voer de onderstaande opdrachten steeds op een nieuwe regel uit.
  2. Zorg dat het bestand op de juiste manier begint en eindigt.
  3. Maak een nieuwe variabele aan die naam heet en de waarde klaas heeft (in de eerder genoemde string notatie)
  4. Stuur de waarde van naam naar de webbrower.
  5. Verander de waarde van naam in henk.
  6. Stuur wederom de waarde van naam naar de webbrower.
  7. Bekijk het resultaat op http://localhost/phpcursus/op-3-1.php
  8. Als het goed is, is het resultaat een venster waarin klaashenk (zonder spatie of enter) geprint staat
  9. Bedenk een manier om de string "<br />" (de XHTML code voor een nieuwe regel) tussen klaas en henk te krijgen.
  10. Bekijk weer het resultaat om te controleren of dit gelukt is.
  11. Vergelijk de inhoud van het bestand dat u gemaakt heeft met de inhoud van op-3-1.txt

    Opmerking: Het bestandje waarmee vergeleken wordt heeft de extensie .txt, dit om te voorkomen dat de inhoud als PHP geïnterpreteerd wordt en u dus niet meer zou kunnen zien wat de code was.

3.1.2. Andere typen variabelen

Tot nu toe hebben we zonder het echt te weten al verschillende soorten variabelen gebruikt, namelijk strings en integers. Hieronder volgt een volledige lijst van de beschikbare variabele typen in PHP, met steeds voorbeelden van de waarden die de variabelen kunnen bevatten.

  • Integer: Gehele getallen
    $a = 3;
    $b = -16;
    $c = 130;
    
  • Double: Dubbele precisie
    $a = 0.9;
    $b = -19.734;
    $c = 100.001;
    
  • Float: Drijvende komma
    $a = 4e-15;
    $b = 6.000000000001;
    $c = 15.1;
    
  • Boolean: Booleanse
    $a = True;
    $b = False;
    
  • Char: Karakters
    $a = 'b';
    $b = '6';
    $c = '#';
    
  • String: Tekenreeks
    $a = "ik ben een string";
    $b = "String";
    $c = "";
    
  • Array: Variabele die meerdere variabelen kan bevatten
    $a = array("a", "b", 12, 5.0, True);
    $b = array("a", "b", "c");
    $c[0] = "a";
    $c[1] = "b";
    $c[2] = "c";
    
    Opmerking: Merk op dat $b en $c hetzelfde zijn.

3.2. Condities

In bijna ieder PHP-script zal het nodig blijken om te bekijken of variabelen aan bepaalde condities voldoen: is een bepaalde datum al geweest, klopt het ingevoerde wachtwoord, is het ene getal groter dan het andere?

De structuur van zulke condities ziet er uit als:

  • Als een conditie waar is
    • Voer dit uit als de conditie waar is
  • Anders
    • Voer dit uit als de conditie onwaar is

In PHP kunnen we het volgende script maken dat gebruik maakt van deze structuur:

<?php
$leeftijd_jan = 30;
$leeftijd_piet = 35;

if ($leeftijd_jan > $leeftijd_piet) {
    echo "Jan is ouder dan Piet";
    }
else {
    echo "Jan is jonger dan Piet";
    }
?>

Opmerking: Merk op de variabelen namen hierboven een liggend streepje, _, bevatten, het is gebruikelijk dit te doen als de naam van een variabele uit 2 delen bestaat. Verder wordt het groter dan teken, >, gebruikt om de waarden van 2 variabelen te vergelijken.

Opdracht 3.2.

  1. Maak in de map phpcursus/ een bestandje op-3-2.php aan en open het in kladblok.
  2. Plak de code uit bovenstaand voorbeeld in het bestand.
  3. Bedenk wat de uitkomst van het script moet zijn.
  4. Controleer dit door naar http://localhost/phpcursus/op-3-2.php te surfen.
  5. Pas de leeftijden van Piet en Jan zo aan dat Piet jonger is dan Jan en bekijk opnieuw het resultaat.

3.2.1. Vergelijkings operatoren

In het bovenstaande voorbeeld gebruikten we het groter dan teken, >, om twee variabelen te vergelijken. Het > teken is een vergelijkings operator. Het idee van zo'n operator is dat de variabelen aan twee kanten met elkaar vergeleken worden. Het resultaat van zo'n vergelijking is altijd waar of onwaar, True of False. Andere operatoren zijn:

Tabel 3.1. Vergelijkings operatoren
operatorstaat voor
>groter dan
<kleiner dan
>=groter dan of gelijk aan
<=kleiner dan of gelijk aan
==gelijk aan
!=ongelijk aan

Opdracht 3.3.

  1. Maak in de map phpcursus/ een bestandje op-3-3.php aan en open het in kladblok.
  2. Plak het volgende script erin:
    <?php
    $getal1 = 1;
    $getal2 = 2;
    
    if ($getal1 == $getal2) {
        echo "Waar";
        }
    else {
        echo "Onwaar";
        }
    ?>
  3. Sla het bestand op, maar sluit niet af.
  4. Zie http://localhost/phpcursus/op-3-3.php voor het resultaat.
  5. Het resultaat is Onwaar (1 is immer niet gelijk aan 2).
  6. Dit resultaat is alvast ingevuld in onderstaande tabel. Maak deze tabel af (op papier), door:
    • de waarden van $getal1 en $getal2 te wijzigen.
    • de vergelijkings operator te wijzigen.
    • de wijzigingen op te slaan.
    • de webbrowser met het resultaat steeds te verversen (F5).
  7. Tabel 3.2. Oefenen met vergelijkings operatoren
    $getal1operator$getal2uitkomst
    1==2Onwaar
    3==3...
    1<=1...
    5>6...
    5!=6...
    3!=3...

3.3. Lussen

Tot nu toe heeft het programmeren ons alleen maar meer tijd gekost. We hadden ook gewoon Onwaar in een bestandje kunnen zetten, in plaats van de veel ingewikkeldere codes die hetzelfde resultaat opleveren. En ook al zal hetgeen we nu al geleerd hebben belangrijk blijken, het gebruik van lussen is bij uitstek het voordeel van programmeren!

Een lus wordt gebruikt om bepaalde stukjes code een bepaald aantal keer te herhalen. Er zijn drie soorten lussen, maar in deze cursus bespreken we alleen de for-lus. De andere twee, while-lus en do..while-lus zijn slechts variaties hierop.

3.3.1. For-lus

Stel dat we de getallen 1 t/m 20 onder elkaar op het scherm willen krijgen, dan kunnen we deze gewoon intypen. Met twintig getallen gaat dat nog wel, zodra het er meer worden gaat het veel tijd kosten. We kunnen ook een scriptje met een lus schrijven dat dit voor ons doet. Zo'n script zou er als volgt uit zien:

<?php
for($i = 1; $i <= 20; $i++) {
    echo $i . "<br />\n";
    }
?>

De werking van dit script kan geïllustreerd worden met een stroomdiagram:

Of in woorden:

  1. De variabele $i wordt op 1 gezet (geïnitialiseerd).
  2. Er wordt gecontroleerd of de waarde van $i (1 in dit geval), wel kleiner is dan 20.
  3. Als dit het geval is wordt de regel $i . "<br />\n" ("1<br />\n" in dit geval) naar de browser gestuurd.
  4. De variabele $i wordt met 1 opgehoogd (door $i++), en wordt dus 2.
  5. Er wordt gecontroleerd of de waarde van $i wel kleiner is dan 20.
  6. Als dit het geval is wordt de regel $i . "<br />\n" naar de browser gestuurd.
  7. De variabele $i wordt met 1 opgehoogd.
  8. Stap 5 t/m 7 worden herhaald tot $i gelijk is aan 20.

De 3e regel wordt simpelweg 20 keer uitgevoerd.

Opdracht 3.4.

  1. Maak in de map phpcursus/ een bestandje op-3-4.php aan en open het in kladblok.
  2. Plak het volgende script erin:
    <?php
    $factor = 10;
    for($i = 1; $i <= 10; $i++) {
        echo $i . " * " . $factor . " = " . $i * $factor . "<br />\n";
        }
    ?>
    
  3. Sla het bestand op, maar sluit niet af.
  4. Zie http://localhost/phpcursus/op-3-4.php voor het resultaat. Probeer te begrijpen wat er gebeurt!
  5. Pas het script zo aan dat het de tafel van 5, beginnend bij 0 en eindigend bij 100 naar de browser stuurt.
  6. Vergelijk het script met op-3-4.txt.

3.4. Functies

Het is mogelijk in een programmeertaal alles wat nodig is zelf te schrijven, maar in de meeste talen zijn de veelvoorkomende taken erg vereenvoudigd met behulp van functies. Zo zijn er functies die het aantal tekens in een string kunnen tellen, of stukken uit strings kunnen kopiëren. In PHP zijn standaard al ontzettend veel functies ingebakken en bij de XAMPP installatie die wij gebruiken zijn ook nog veel extra bibliotheken geïnstalleerd (Dit kunt u zien op http://localhost/xampp/phpinfo.php) met allemaal extra functies.

Op de website www.php.net is een goed naslagwerk van alle veel voorkomende functies te vinden. Het is voornamelijk in het Nederlands, maar af en toe komen er wat Engelse woorden in voor. Ze zijn onderverdeeld in catagorieën. De twee hierboven genoemde voorbeelden zijn te vinden via String Functions, en worden toegelicht op String Lengte en Substring.

De ingebakken functies kunnen zo gebruikt worden:

<?php
$naam = "Piet Jansen";
echo "lengte: " . strlen($naam) . "<br />\n";
echo "voornaam: " . substr($naam, 0, 4) . "<br />\n";
echo "achternaam: " . substr($naam, 5) . "<br />\n";
?>

Opdracht 3.5.

Controleer het resultaat van bovenstaand scriptje, door zelf een bestand aan te maken in phpcursus/ en dit met de browser te bekijken.