Informaticasite van het Lauwers College te Buitenpost                 © R.J. van der Beek
 

Hoofdstuk 16: Javascript en PHP

16.6. De structuur van PHP

  16.6.1. Variabelen en operatoren

De naam van een variabele moet beginnen met het $-teken, bijvoorbeeld $piet

Je hoeft in PHP variabelen niet te declareren.
PHP ziet aan de toegekende waarde wel of het om een getal of een woord (string) gaat.
Als je de volgende php-code hebt:

$var1 = 8;
$var2 = 13;
$var3 = $var1 + $var2;

dan krijgt $var3 de waarde 21

En als je de volgende php-code hebt:

$var1 = "jan";
$var2 = "klaassen";
$var3 = $var1 . $var2;

dan krijgt $var3 de waarde "jan klaassen" (de beide strings worden "opgeteld"; in de meeste programmeertalen moet je dan een + gebruiken, maar in PHP gebeurt dat dus met een punt)

Arrays
Er zijn ook arrays. Een array is een geindexeerde rij getallen of strings.
Als je een array $b hebt, dan is $b[0] de eerste van de rij, $b[1] is de tweede van de rij, enz.
Met count($b) wordt in dat geval bedoeld: het aantal elementen van die rij.

Toekennen van waarden aan een array:

$b[0] = "Jan";
$b[1] = "Piet";
$b[2] = "Klaas";

Het kan ook op andere manieren, zie daarvoor hoofdstuk 19.6

Operator Betekenis
$a + $b de optelling van $a en $b (als $a en $b getallen zijn)
$a . $b de optelling (concatenatie) van $a en $b (als $a en $b strings zijn)
$a - $b de aftrekking van $a en $b
$a * $b de vermenigvuldiging van $a en $b
$a / $b de deling van $a door $b
$a % $b de rest bij de deling van $a door $b (in Pascal: mod )

Logische operatoren Betekenis
$a and $b (ook mag: $a && $b) is waar als $a en $b beide waar zijn
$a or $b (ook mag: $a || $b) is waar als $a of $b waar is (het inclusieve of)
$a xor $b is waar als $a of $b waar is, maar niet allebei (het exclusieve of)
! $a is waar als $a niet waar is

  16.6.2. Opdrachten in PHP

Programmaregels in PHP lijken veel op programmaregels in C of Java of C++
  • Elke regel wordt afgesloten met een puntkomma.
  • De opdracht $teller = $teller + 1; wordt meestal afgekort tot: $teller++
  • Variabelen hoef je niet te declareren.
    PHP maakt uit de toekenning van waarden op om welke soort het gaat.
    Eventueel kun je het type er tussen haakjes voor zetten, als volgt:

          $getal = (integer) 7 ;
          $kommagetal = (floating-point) 5.83 ;
          $tekst = (string) "abcdefg" ;
          $waarofnietwaar = (boolean) true ;

  • Iets op het scherm afdrukken gaat met print of met echo
    Daarbij kun je tekst en variabelen gewoon door elkaar gebruiken.

          print ("Dit is een tekst en de waarde van de variabele \$getal: $getal ");

    Als $getal de waarde 7 heeft dan wordt er in dit geval afgedrukt:
          Dit is een tekst en de waarde van de variabele $getal: 7

    Doordat het ontsnappingsteken \ voor de eerste $getal staat wordt de tekst $getal afgedrukt, en omdat het onsnappingsteken niet voor de tweede $getal staat wordt daar de waarde 7 afgedrukt.

    Het kan ook zo:

          echo "Dit is een tekst en de waarde van de variabele \$getal: $getal ";

    Er is een uitzondering: als je een functie toepast op een variabele (bijv. round($getal,2) : die functie zorgt er voor dat $getal wordt afgerond op twee decimalen) dan kun je het niet klakkeloos tussen de tekst zetten. Je moet dan de concatenatie-punt gebruiken:

          echo "Dit is een tekst en de afgeronde waarde ".round($getal,2)." die wordt afgedrukt door PHP";

  • Samengestelde opdrachten moeten tussen accolades worden geplaatst.
    (zie de voorbeelden hierna)

  16.6.3. Voorwaardelijke opdrachten in PHP (met IF )

  • Syntax van voorwaardelijke opdrachten met IF:

    if (voorwaarde) 
       {
       opdracht1;
       opdracht2;
       opdracht3 enz;
       }

    De voorwaarde moet dus tussen haakjes staan.
    Het woordje THEN wordt hier niet gebruikt !
    En de opdrachten die, als aan de voorwaarde is voldaan, moeten worden uitgevoerd, staan tussen accolades. Elke opdracht moet met een puntkomma worden afgesloten.
    Voorbeeld:

    if ($teller>10) {
    		print("Er zijn al meer dan 10 bezoekers geweest");
    		print("Het gaat goed!");
    		}
    

  • Ook kan if ( ) { ... } else { ... } worden gebruikt, dus zo:

    if (voorwaarde) 
        {
        opdracht1;
        opdracht2;
        opdracht3 enz;
        }
    else 
        {
        opdracht4;
        opdracht5;
        opdracht6 enz;
        }

  • Ook kan if ( ) { ... } elseif ( ) { ... } else { ... } worden gebruikt, dus zo:

    if (voorwaarde1) 
        {
        opdracht1;
        opdracht2;
        opdracht3 enz;
        }
    elseif (voorwaarde2) 
        {
        opdracht4;
        opdracht5 enz;
        }
    elseif (voorwaarde3) 
        {
        opdracht6;
        opdracht7 enz;
        }
    else
        {
        opdracht8;
        opdracht9 enz;
        }

  • Verder heb je nog de switch-opdracht:

    switch ($variabele)
    {
      case "waarde1": 
          opdracht1;
          opdracht2;
          opdracht3 enz;
          break;
      case "waarde2": 
          opdracht4;
          opdracht5 enz;
          break;
      default:
          opdracht6;
          opdracht7 enz;
    }

    Waarom de laatste opdracht na een case-voorwaarde steeds break is lees je hieronder.
    Als aan geen van de voorwaarden na case voldaan is worden de opdrachten na default uitgevoerd, dat is altijd het laatste blokje van een switch-opdracht.

  • Break en continue.
    Als ergens in de lus een break staat, dan zal de lus onmiddelijk gestopt worden, en gaat de uitvoer van het script verder op de eerste regel na de lus.
    Bij de switch-opdracht is dat meestal nodig (zie de code hierboven) , omdat steeds gekeken wordt of er aan de voorwaarde na case voldaan is. Als er niet aan voldaan wordt worden de opdrachten na die case overgeslagen, en wordt gekeken of er aan de voorwaarde na de volgende case wordt voldaan.
    Als er wel aan de voorwaarde na case wordt voldaan dan worden de opdrachten na die case uitgevoerd, en als er geen break in voorkomt ook alle opdrachten na de volgende case-voorwaarden. Meestal is dat niet de bedoeling, en dan zorg je er met een break-opdracht voor dat de pdrachten na de volgende case-voorwaarden worden overgeslagen. Als je continue gebruikt i.p.v. break dan wordt ook de uitvoer van de huidige lus gestopt, maar dan wordt vervolgd met de lus met de volgende iteratiewaarde.

  • Tenslotte heb je ook nog de verkorte if-opdracht, die alleen gebruikt kan worden als de opdrachten na if en else beide toekenningsopdrachten zijn met dezelfde variabele.

    In plaats van:

    if (voorwaarde) 
        { $p = "toekenning1"; }
    else 
        { $p = "toekenning2"; }

    kan ook gebruikt worden:

    $p = (voorwaarde) ? "toekenning1" : "toekenning2";

  16.6.4. Operatoren voor het vergelijken.

  • In bovenstaand voorbeeld zie je:
    if ( $teller > 10 ) {opdrachten; }

    Ook kan:
    if ( $teller < 10 ) {opdrachten; }

    Als je wilt nagaan of de waarde van $teller gelijk is aan 10 dan wordt het:
    if ( $teller == 10 ) {opdrachten; }
    N.B.: een dubbele = !!!

    if ( $teller >= 10 ) {opdrachten; } kan ook

    if ( $teller != 10 ) {opdrachten; }
    dit betekent: als de waarde van $teller niet gelijk aan 10 is dan .....

    Ook kan:
    if ( $teller > 10 ) and ($teller < 20) {opdrachten; }

    en ook :
    if ( $teller < 10 ) or ($teller > 20) {opdrachten; }

    Ook kan:
    if ( $teller ) {opdrachten; }
    Dit komt op hetzelfde neer als: if ( $teller > 0 ) {opdrachten; }

  16.6.5. Herhaling in PHP, m.b.v. de FOR-lus en/of WHILE-lus

  • De for-lus gaat in php als volgt:

    for ($teller=1 ; $teller<=10 ; $teller++) 
        {
        opdracht1;
        opdracht2;
        opdracht3 enz;
        }

    Dit betekent hetzelfde als: for teller=1 to 10 ............ next i (in basic)
    of in pascal:
    for teller:=1 to 10 do
    begin
               opdracht1;
               opdracht2;
               opdracht3 enz;
    end;


  • De while-lus gaat in php als volgt:

    while (voorwaarde) { opdrachten }

    Als de voorwaarde in het begin al false is dan worden de opdrachten geen enkele keer uitgevoerd.

  • De do-while-lus gaat in php als volgt:

    do { opdrachten } while (voorwaarde);

    Hierbij worden de opdrachten minstens één keer uitgevoerd.

  • Als je een array met sleutelwaarden gebruikt, dan kun je handig gebruik maken van each
    Als de array in $b is opgeslagen, dan geeft each($b) de eerste keer dat die opdracht wordt uitgevoerd het eerste element van de array, de tweede keer het tweede element, enz.
    En daarbij kun je de sleutel opvragen, en de waarde.
    Als $t = each($b) dan geeft $t[key] de sleutelwaarde, en $t[value] de waarde, dus $t is dan een array dat uit twee elementen bestaat, nl. $t[key] $t[value]

    Als je de volgende PHP-code hebt:

    $b["J"] = "Jan";
    $b["P"] = "Piet";
    $b["K"] = "Klaas";
    
    for ($n = 0; $n < count($b); $n++)
    {
        $t = each($b);
        print ("De sleutel is \$t[key] en de waarde is \$t[value] ");
    }
    

    dan is de uitvoer:
    De sleutel is J en de waarde is Jan
    De sleutel is P en de waarde is Piet
    De sleutel is K en de waarde is Klaas


  • Als je een array met sleutelwaarden gebruikt, dan kun je ook handig gebruik maken van foreach
    Dan worden alle elementen van de array doorlopen.

    Als je de volgende PHP-code hebt:

    $b["J"] = "Jan";
    $b["P"] = "Piet";
    $b["K"] = "Klaas";

    foreach ($b as $s => $w) { print ("\$b[$s] = $w<br>\n");}

    dan is de uitvoer:
    $b[J] = Jan
    $b[P] = Piet
    $b[K] = Klaas


    Er zijn nog meer mogelijkheden om de elementen van een rij af te drukken, zie daarvoor hoofdstuk 19.6

  • Met de opdracht break wordt een herhalingslus afgebroken.
    Als je bijv. de volgende PHP-code uit laat voeren:

    for ($teller=1 ; $teller<=10 ; $teller++) 
        {
        print ($teller);
        if ($teller==2) {break;}
        }

    dan is de uitvoer: 1 2

  16.6.6. Toepassing: Een keuzelijst maken m.b.v. PHP

We willen een php-document maken waarin de gebruiker zijn geboortedatum m.b.v. drie keuzemenu's aan kan geven.
Dus op de volgende manier:

Geef je geboortedatum:

Bij de dag moet uit 1 t/m 31 kunnen worden gekozen (dat is in het voorbeeldje hierboven niet zo).
De html-code voor die keuzelijst is als volgt:

<select name="dag" size="1">
<option value="1"> 1 </option>
<option value="2"> 2 </option>
......................................................
<option value="31"> 31 </option>
</select>

Maar het is niet de bedoeling dat we die 31 option-regels uittypen. Als je PHP gebruikt kan het m.b.v. een for-lus.
Het keuzemenu voor de 12 maanden kan ook m.b.v. een for-lus als we de namen van de maanden in een array zetten.
Bij het keuzemenu voor het jaar is het de bedoeling dat er uit de jaren 1950 t/m 2000 gekozen kan worden. Dat kan ook weer m.b.v. een for-lus.

We beginnen met de keuzelijst voor de dag.
Dat kan op de volgende manier met PHP:

<?php 
    print ("<select name=\"dag\" size=\"1\"> <br>\n");
    for ($teller=1 ; $teller<=31 ; $teller++) 
    {
    print ("<option value=\"$teller\"> $teller </option> <br>\n");
    }
    print ("</select> \n");
?>

Dan komt de keuzelijst voor de maand.
Dat kan op de volgende manier met PHP:

<?php 
    print ("<select name=\"dag\" size=\"1\"> <br>\n");
    $maand[1]="Januari";
    $maand[2]="Februari";
    $maand[3]="Maart";
    $maand[4]="April";
    $maand[5]="Mei";
    $maand[6]="Juni";
    $maand[7]="Juli";
    $maand[8]="Augustus";
    $maand[9]="September";
    $maand[10]="Oktober";
    $maand[11]="November";
    $maand[12]="December";
    for ($t=1 ; $t<=12 ; $t++) 
    {
    print ("<option value=\"$maand[$t]\"> $maand[$t] </option> <br>\n");
    }
    print ("</select> \n");
?>

en de keuzelijst voor het geboortejaar gaat op dezelfde manier als de keuzelijst voor de maand.