Verschillende types

Een variabele kan één van volgende types zijn:

Voorbeelden

Code Waarde van de variabele
$var_int = 6; Het gehele getal 6
$var_float = 10.5; Het kommagetal 10,5
$var_float_2 = 1.5e3; Het getal 1500
$var_string = "dit is een string"; Een tekst met de opgegeven waarde
$var_array = array (1,2,3,4); Een verzameling met de elementen 1,2,3,4
$var_null = null; Een lege variabele
$var_bool = true; Een geldige waarde

Boolean

Een boolean kan slechts 2 waarden aannemen: TRUE of FALSE. Bij het omzetten van een variabele naar een boolean zijn alle volgende FALSE, alle andere komen overeen met een TRUE:

Booleans worden gebruikt voor het testen van bepaalde zaken. Deze tests worden gebruikt om na te gaan of bepaalde zaken moeten uitgevoerd worden. Een voorbeeld: als iemand nog niet ingelogd is, moet hij een aanmeldingsscherm krijgen, en als hij wel aangemeld is, moet hij begroet worden met zijn persoonlijke naam.

Integer

Dit zijn eenvoudige gehele getallen, positief of negatief. De minimum- en maximumwaarden zijn afhankelijk van het besturingssysteem en de processor van de server, maar gaan minstens van -2 miljard tot +2 miljard (-231/2 tot +231/2).

Heb je een 64-bits-cpu dan gaat dit bereik veel verder.

Je kan gebruik maken van decimale, octale en hexadecimale getallen. Om aan te duiden dat je met octale getallen werkt, laat je het getal voorafgaan door een 0 (nul) (voorbeeld: 034) en om met hex-getallen te werken laat je het getal voorafgaan door een 0x (nul-x) (voorbeeld: 0x1A).

Als je een integer opgeeft die groter of kleiner is dan de minimum- of maximumwaarden wordt deze automatisch omgezet naar een float.

Float

In PHP wordt de term float gebruikt om aan te geven dat we met een kommagetal werken, positief of negatief. Er wordt gebruik gemaakt van 64 bits om het getal in op te slaan, hierdoor krijgen we getallen gaande van -264/2 tot +264/2.

Hou er rekening mee dat floating point getallen, door de afronding, niet gebruikt mogen worden om te vergelijken. 0.7 kan opgeslagen worden als 0.7000000001, maar ook als 0.699999999999.

Vertrouw dus nooit vergelijkingen tussen floats.

Floats worden ook soms als reals of doubles aangeduid.

Strings

Een string (tekenreeks) is eenvoudigweg een reeks karakters. Strings hebben geen echte grens, en worden alleen beperkt door de instellingen van het php.ini-bestand.

Strings kunnen aan een variabele worden toegewezen door het gebruik van zowel dubbele, als enkele aanhalingstekens of door gebruik te maken van de speciale heredoc-syntax. Deze laatste wordt vaak gebruikt bij lange stukken tekst. Ook 1 enkel karakter wordt gezien als een string.

NULL

Null-types kunnen slechts 1 waarde bevatten, namelijk de waarde NULL. Deze speciale waarde betekent eigenlijk “niets” of “inhoudloos”. Ze wordt vaak gebruikt om de inhoud van een variabele te vernietigen.

Arrays

Dit is een gemengd type die gegevens van verschillende types kan bevatten. Over arrays zien we later meer.

Objecten

Objecten zijn een verzameling van gegevens (zoals array's) maar bevatten ook acties of methodes.

Resources

Dit type is bedoeld om een verwijzing naar een bestand of een database-koppeling te bevatten. We komen deze later in deze cursus nog tegen.

Omzetten van type of casting

Zelf omzetten

In sommige gevallen is het nodig om zelf het type van een variabele aan te passen naar een ander type. Dit doen we door de naam van de variabele (of een letterlijke waarde) te laten voorafgaan door het type dat we wensen:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Variabelen</title>
</head>
<body>
  <p><?php
    $werkgeheugen = "4 GB";
    print "De integer \$werkgeheugen wordt als boolean " . (bool)$werkgeheugen;
  ?></p>
</body>
</html>

De mogelijkheden zijn:

unset wordt meestal gebruikt als functie. Meer hierover later.

Automatische conversie van types

Zelf omzetten is in de meeste gevallen zelfs niet nodig. PHP zal zelf het nodige type bepalen en dit zo nodig aanpassen als dit nodig blijkt te zijn:

  <p><?php
    print "\"100\" + 15 = " . $var = "100" + 15; //$var is een integer (115)
    print "<br />\"100\" + 15.0 = " . $var = "100" + 15.0; //$var is een float (115.0)

    print "<br />18 . \" meter\" = " . $var = 18 . " meter"; //$var is een string ("18 meter")
    print "<br />18 + \" meter\" = " . $var = 18 + " meter"; //$var is een integer (18)
    print "<br />\"7 zotten zwemmen\" + 3 = " . $var = "7 zotten zwemmen" + 3; //$var is een integer (10)

Ook verandert het type van de variabele naar gelang de bewerkingen die er op uitgevoerd worden:

    $var = "1"; //$var is een string
    print "<br />\"1\" + 3 = " . $var = $var + 3; //$var wordt een integer
    print "<br />\$var / 3 = " . $var = $var / 3; //$var wordt een float
  ?></p>

Bij het omzetten kun je het resultaat bepalen met onderstaande tabel:

(int)$var (bool)$var (string)$var (float)$var
NULL 0 False 0
True 1 True '1' 1
False 0 False '0' 0
0 0 False '0' 0
3.8 3 True '3.8' 3.8
'0' 0 False '0' 0
10 10 True '10' 10
'18 meter' 18 True '18 meter' 18
'testbericht' 0 True 'testbericht' 0

Controleren van het type

Doordat een variabele elk type kan zijn, kan het handig zijn om te weten welk type precies. Hiervoor hebben we een aantal mogelijke functies:

boolean is_int(mixed variabele)
boolean is_float(mixed variabele)

boolean is_string(mixed variabele)

boolean is_array(mixed variabele)

Deze functie omschrijving lees je als volgt:

boolean is_array(mixed variabele)

Deze functies leveren een TRUE op, als de aangeleverde variabele van het aangegeven type is, respectievelijk integer, float, string en array. Deze TRUE kan gebruikt worden om een test uit te voeren:

  <p><?php
    $var = 10;
    if (is_float($var)) { // $var is een int, er wordt dus niets weergegeven
      print "De variabele \$var is een float.";
    }
  ?></p>

var_dump() is een functie die rechtstreeks het type afdrukt, gettype() levert een string op, en moeten we laten weergeven met de print-functie:

  <p><?php
    $welkom = "Hallo allemaal";
    var_dump($welkom); //drukt af: string(14) "Hallo allemaal"
    print gettype($welkom); //drukt af: string
  ?></p>

Om in een script te testen van welk type een variabele is, moet je gebruik maken van de is_*()-functies en niet van de gettype()-functie omdat de gettype()-functie soms onverwachte resultaten kan opleveren. Zo leveren sommige PHP-versies de naam float voor een kommagetal, terwijl andere real gebruiken.

Gelijkheid

Voor het toekennen van een waarde aan een variabele hebben we het gelijkheidssteken gebruikt. Stel dat we 2 variabelen willen vergelijken:

  <?php print "<p>";
    $var1 = 3;
    $var2 = 4;
    if ($var1 = $var2){
      print "\$var1 en \$var2 zijn gelijk.<br />";
    } ?>

Dit zal niet het verwachte resultaat opleveren, want in de vergelijking, wordt aan $var1, de waarde van $var2 toegekend, waardoor tussen de haakjes gewoon een toekenning komt te staan, en deze levert altijd de waarde TRUE op. Op het scherm zullen we dus verkrijgen dat "$var1 en $var2 zijn gelijk.".

Om een vergelijking uit te voeren moeten we hiervoor een ander symbool gebruiken: de dubbele gelijkheidstekens (==).

  <?php print "<p>";
    $var1 = 3;
    $var2 = 4;
    if ($var1 == $var2){
      print "3 en 4 zijn gelijk.<br />";
    } ?>

Deze melding zal niet afgedrukt worden, omdat we gebruik maken van de juiste vergelijkingsoperatoren.

Op een gelijkaardige manier kunnen we ook de ongelijkheid testen:

  <?php $var1 = 3;
    $var2 = 4;
    if ($var1 != $var2){
      print "3 en 4 zijn niet gelijk.<br />";
    } ?>

We kunnen bijvoorbeeld ook het volgende testen:

  <?php $var1 = "10";
    $var2 = 10;
    if ($var1 == $var2){
      print "\"10\" en 10 zijn gelijk.<br />";
    } ?>

Deze vergelijking zal waar zijn, maar toch zijn $var1 en $var2 niet helemaal gelijk. De eerste is namelijk een string, de tweede een integer. Om ook de types te controleren gebruiken we driedubbele gelijkheidstekens (===).

  <?php
    if ($var1 === $var2){
      print "\"10\" en 10 zijn identiek.<br />";
    }
    if ($var1 !== $var2){
      print "\"10\" en 10 zijn niet identiek.<br />";
    } ?></p>

Deze zal dus op ons scherm ""10" en 10 zijn niet identiek." afdrukken.

Testen van variabelen

Soms kan het nuttig zijn, om te controleren of een bepaalde variabele al bestaat of niet, of als er al een waarde is aan toegekend. Dit doen we met:

boolean isset(mixed var);
boolean empty(mixed var);

Met isset() controleren we of een variabelen al aangemaakt is of niet, en levert een TRUE op als deze bestaat. empty() controleert of de waarde gelijk is aan 0, FALSE, NULL of een lege string en levert een TRUE op als dit zo is.

Voorbeeld:

  <p><?php
    $var = NULL;
    if (isset($var)){
      print "NULL bestaat.<br />"; //drukt niets af
    }
    $var = 0;
    if (isset($var)) {
      print "0 bestaat.<br />"; //drukt wel af
    }
    if (empty($var)) {
      print "0 is leeg.<br />"; //drukt wel af
    }
    $var = "test";
    if (isset($var)) {
      print "test bestaat.<br />"; //drukt wel af
    }
    if (empty($var)) {
      print "test is leeg.<br />"; //drukt niet af
    }
    ?></p>

Een variabele wordt altijd vernietigd op het einde van elk script, maar soms kan het nuttig, aangenaam, veilig, leuk zijn om deze toch manueel te vernietigen met:

unset (mixed var)

Voorbeeld:

  <p><?php
    $fout = true;
    if (isset($fout)) {
      print "Voor het uitvoeren van unset.<br />"; //drukt af
    }
    unset($fout);
    if (isset($fout)) {
      print "Na het uitvoeren van unset.<br />"; //drukt niets af
    }
    $var = 10;
    if ($var > 12) {
      $fout = true;
    }
    if (isset($fout)) {
      print "De variabele is groter dan 12!";
    }
    ?></p>

Constanten

Deze zijn heel goed te vergelijken met variabelen, maar met dit verschil dat de inhoud ervan niet kan gewijzigd worden gedurende de uitvoering van het script. Ook de toewijzing is iets anders, we gebruiken hiervoor namelijk het kernwoord define:

  <p><?php
    define ("GEBRUIKERSNAAM", "Dany Pinoy");
    print GEBRUIKERSNAAM;
  ?></p>

Ook moeten we deze niet laten voorafgaan door het dollarteken en meestal gebruikt men hoofdletters voor constanten, hoewel dit niet verplicht is. Naast eigen constanten zijn er ook een aantal voorgedefinieerde constanten zoals PHP_VERSION en PHP_OS.

Een overzicht van de voorgedefinieerde constanten vindt je op http://php.net/manual/en/language.constants.predefined.php.

Weergeven Broncode