Deze website maakt gebruik van diensten van Google voor het tonen van advertenties en het bijhouden van bezoekersstatistieken. Google kan hiermee uw surfgedrag volgen. Zie voor meer informatie het privacybeleid van Google. Via Your Online Choices kunt u zich afmelden voor gepersonaliseerde advertenties. Deze melding verbergen.

2 Teksten weergeven

Een webpagina zonder tekst is maar saai, zeker als we alle HTML voor het gemak ook even onder 'tekst' verstaan. Een lege pagina is precies het resultaat als je PHP niet de opdracht geeft om gegevens, tekst of HTML naar de browser te sturen. Dit hoofdstuk gaat in op het weergeven van gegevens via PHP en het combineren van HTML code en PHP scripts in één bestand.

Theorie

Print en Echo

De twee belangrijkste functies om uitvoer naar de browser te sturen zijn print() en echo(). Hoewel er verschillen zijn tussen de twee functies, zijn deze verschillen voor de beginnende PHP-programmeur niet interessant. Daarom zullen we de twee functies gelijkwaardig beschouwen en zo nu en dan ook door elkaar gebruiken. De syntaxis zijn als volgt:

int print ( string $arg )
void echo ( string $arg1 [, string $... ] )

Als parameter wordt dus een string verwacht. De waarde van de string wordt direct naar de browser van de bezoeker gestuurd en wordt dus op het scherm van de bezoeker getoond. In php-code kunnen print() en echo() er als volgt uit zien:

print("Hallo wereld");
print(
'Hallo wereld');
print
"Hallo wereld";
print
'Hallo wereld';
echo("Hallo wereld");
echo(
'Hallo wereld');
echo
"Hallo wereld";
echo
'Hallo wereld';

Er kunnen dubbele of enkele aanhalingstekens gebruikt worden en de string mag eventueel ook tussen haakjes staan, maar die haakjes mogen ook weggelaten worden. De acht voorbeelden hierboven geven dan ook allen exact hetzelfde resultaat.

Voor welke mogelijkheid gekozen wordt is dus eigenlijk niet zo belangrijk, zolang de keuze maar consequent wordt toegepast: aan de ene kant een enkel aanhalingsteken en aan de andere kant een dubbel aanhalingsteken gaat niet goed. Aan de ene kant wel een haakje en aan de andere kant geen gaat natuurlijk ook niet goed.

In de praktijk worden de haakjes bij print() of echo() vrijwel altijd weggelaten omdat ze in tegenstelling tot alle andere functies niet verplicht zijn: waarom meer moeite doen dan nodig is. Dubbele en enkele aanhalingstekens worden wel allebei gebruikt. Afhankelijk van de situatie is het ene soort namelijk makkelijker in gebruik dan het andere. Hierover meer verderop in dit hoofdstuk.

De auteur van dit boek geeft de voorkeur aan echo. Voor het doel van dit boek zijn print en echo gelijkwaardig aan elkaar. In de voorbeelden in dit boek kan dus waar echo gebruikt is ook print gedacht worden.

Variabelen Weergeven

In plaats van het weergeven van letterlijke tekst (zoals in de voorgaande paragraaf) kan echo ook gebruikt worden om de waarde van variabelen weer te geven. In plaats van een tekst tussen aanhalingstekens kan direct de naam van de variabele (inclusief voorafgaand dollarteken) worden opgegeven. PHP stuurt dan de inhoud van die variabele naar de browser van de bezoeker, zoals in onderstaand voorbeeld:

$variabele = "Welkom op mijn website";
echo
$variabele;

Als bovenstaande code in een PHP-script wordt uitgevoerd, dan wordt de tekst Welkom op mijn website in de browser weergegeven.

Variabelen Combineren

In een enkele echo kunnen meerdere variabelen opgenomen worden. Ook kunnen variabelen samen met tekst in één enkele echo gecombineerd worden. Om dit te doen moeten variabelen onderling of variabele en tekst met een punt gescheiden worden.

In onderstaand voorbeeld zijn de variabelen $tekst1 en $tekst2 door middel van een punt aan elkaar gekoppeld en in een enkele echo naar de browser doorgegeven:

$tekst1 = "Met een punt kunnen twee";
$tekst2 = "variabelen aan elkaar gekoppeld worden.";
echo
$tekst1 . $tekst2;

In de browser zal de tekst Met een punt kunnen tweevariabelen aan elkaar gekoppeld worden. Hier ontbreekt een spatie tussen de woorden twee en variabelen. PHP zal hier dus niet zelf een spatie tussen zetten als deze ontbreekt. PHP heeft geen eigen wil en doet dan ook precies wat er gevraagd wordt. Om nu toch een spatie tussen de twee zinsdelen te krijgen kan deze extra spatie eenvoudig aan het einde van $tekst1 of aan het begin van $tekst2 worden toegevoegd. Als dan de twee variabelen aan elkaar gekoppeld worden zit de spatie er gewoon bij in.

In dit specifieke voorbeeld had je natuurlijk ook twee keer echo kunnen gebruiken:

echo $tekst1;
echo $tekst2;

Dat geeft exact hetzelfde resultaat en is minstens net zo makkelijk. Toch is het goed om die punt nu al gezien te hebben. Hij gaat nog vaak terug komen en daarom is het goed om nu al te weten waar die punt voor dient.

Zoals gezegd kan een variabele ook met een tekst, die direct in de echo opgenomen is, worden gecombineerd. Dit is te zien in onderstaand voorbeeld:

$getal = 12;
echo
"Het getal is gelijk aan " . $getal;

In de browser geeft dit Het getal is gelijk aan 12. Zonder punt erachter. Om toch een punt achter deze zin te zetten kan deze achter $getal worden toegevoegd. Eerst weer een punt en daarna een punt tussen aanhalingstekens. De eerste van de twee punten koppelt twee onderdelen aan elkaar. De tweede punt tussen aanhalingstekens is een tekststring met als inhoud een punt!

$getal = 12;
echo
"Het getal is gelijk aan " . $getal . ".";

Behalve variabelen koppelen in een echo zoals hierboven is geïllustreerd, kunnen gekoppelde variabelen ook in een nieuwe variabele opgeslagen worden. Deze nieuwe variabele kan dan niet alleen worden geëchood, maar er kunnen ook andere dingen mee gedaan worden. Deze "andere dingen" komen in de loop van dit boek ter sprake. Twee voorbeelden van het koppelen van variabelen in een nieuwe variabelen zijn hieronder opgenomen:

$nieuwetekst = $tekst1 . $tekst2;
$getal = 12;
$getal_met_tekst = "Het getal is gelijk aan " . $getal . ".";

Naast deze methode met punten om een variabele in een tekst op te nemen, bestaat er nog een andere methode zonder gebruik van deze punten. Hierbij is het verschil tussen enkele en dubbele aanhalingstekens van belang, wat is uiteengezet in de volgende paragraaf.

Dubbele en Enkele Aanhalingstekens

Zoals al eerder ter sprake is gekomen kunnen teksten (ofwel strings) tussen dubbele of enkele aanhalingstekens geschreven worden. Dit is niet om het de programmeur makkelijk te maken, maar er zit daadwerkelijk een verschil tussen deze twee soorten aanhalingstekens.

Men kan stellen dat de dubbele aanhalingstekens 'slimmer' zijn dan de enkele aanhalingstekens. Het gebruik van enkele aanhalingstekens maakt de uitvoering van een PHP-script daarmee iets sneller: PHP hoeft niet na te denken over wat het met de inhoud tussen de aanhalingstekens moet doen. Het snelheidsverschil is met de computers van tegenwoordig dusdanig minimaal dat dit niet de reden moet zijn om de ene keer dubbele en de andere keer enkele aanhalingstekens te gebruiken.

De slimheid van de dubbele aanhalingstekens maakt het mogelijk om variabelen direct in een tekst op te nemen, waarbij PHP de waarde van de variabele op de plek van de variabele in de tekst invoegt. Bekijk het volgende voorbeeld:

$getal = 12;
echo
"Het getal is gelijk aan $getal . ";
echo
'Het getal is gelijk aan $getal . ';

In de browser wordt nu voor de eerste echo de tekst Het getal is gelijk aan 12. weergegeven, maar voor de tweede echo verschijnt domweg Het getal is gelijk aan $getal. Wanneer gebruik wordt gemaakt van enkele aanhalingstekens kijkt PHP dus niet of er een variabele in te tekst is opgenomen.

Hoewel deze methode makkelijker is dan het gestoei met punten, kleven er ook nadelen aan. Deze nadelen worden geïllustreerd met het volgende voorbeeld:

$plaats = 12;
echo
"De club staat op de $plaatse plaats";
echo
'De club staat op de ' . $plaats . 'e plaats';

In de browser geeft dit voor de eerste echo De club staat op de $plaatse plaats en voor de tweede echo De club staat op de 12e plaats. De reden hiervan is dat PHP niet kan bepalen of $plaats met hierachter de letter e, of dat er een heel andere variabele met de naam $plaatse wordt bedoeld! De auteur van dit boek geeft daarom ook persoonlijk de voorkeur aan de tweede methode: misschien iets meer werk, maar het kan niet mis gaan. Daarnaast krijgt de variabele een andere kleur in de PHP-editor waardoor het meteen duidelijk is dat er een variabele tussen de tekst staat (in de voorgaande voorbeelden is de kleur handmatig toegevoegd).

In de tweede echo is tevens gebruik gemaakt van enkele aanhalingstekens: er staat immers geen variabele in de tekststring, maar los er tussen geplakt. In dit geval is het gebruik van dubbele aanhalingstekens dus ook niet noodzakelijk. Dus waarom nog gebruik maken van dubbele aanhalingstekens?

Soms zijn dubbele aanhalingstekens toch wel makkelijk, want de slimmigheid ervan zit niet alleen in het kunnen opnemen van variabelen. Zo zijn er speciale escape sequences die in strings geschreven met dubbele aanhalingstekens opgenomen kunnen worden. Zo wordt de escape sequence \n geschreven tussen dubbele aanhalingstekens omgezet in een newline: er wordt op de volgende regel verder gegaan. Handig om wat meer structuur te geven aan de HTML broncode die naar de browser wordt gestuurd, want standaard zet PHP alles op één regel, ook als er in de PHP-code meerdere regels zijn gebruikt.

echo "Regel een.";
echo
"Regel twee.";

Bovenstaand voorbeeld geeft in de browser als resultaat: Regel een. Regel twee. Onderstaand voorbeeld geeft in de broncode (niet in de browser-weergave, want een nieuwe regel in HTML wordt immers door middel van <br> ingevoegd!) het resultaat:
Regel een.
Regel twee.

echo "Regel een.\n";
echo
"Regel twee.";

Aanhalingstekens en Aanhalingstekens

Er zijn dus aanhalingstekens en aanhalingstekens. Maar wat nu als er ook nog aanhalingstekens in de zin die in een variabele gezet worden staan? Laten we de zin Pietje zei: "Ik begrijp niet zo veel van PHP". in een variabele zetten. Als we hier simpelweg dubbele aanhalingstekens omheen zetten gaat het niet goed!

$pietjezei = "Pietje zei: "Ik begrijp niet zo veel van PHP".";

Wat hierboven mis gaat is dat PHP denkt dat de zin voor Ik ophoudt, omdat het hier weer een dubbel aanhalingsteken tegen komt. Daarna komt er voor PHP iets wat het niet begrijpt: er staat tekst die niet tussen aanhalingstekens staat en het is geen functie. Bovenstaand fragment zal dan ook resulteren in een foutmelding.

Hoe kan het dan wel? Eén mogelijkheid is om gebruik te maken van beide soorten aanhalingstekens. Hierdoor weet PHP wat bij elkaar hoort en is er niks meer aan de hand:

$pietjezei = 'Pietje zei: "Ik begrijp niet zo veel van PHP".';

Een andere mogelijkheid is het escapen van aanhalingstekens. Door een backslash voor een aanhalingsteken te plaatsen weet PHP dat het hierna volgende aanhalingsteken niet het einde van een string aangeeft, maar in de string moet worden opgenomen. Misschien is een voorbeeld duidelijker:

$pietjezei = "Pietje zei: \"Ik begrijp niet zo veel van PHP\".";

Naast dubbele en enkele aanhalingstekens heb je ze dus ook nog met een backslash ervoor!

HTML via PHP Weergeven

Zoals in het begin van dit boek vermeld is, is PHP een aanvulling op HTML. Beide zullen dan ook vaak gecombineerd moeten worden. Naast simpele tekst kan ook HTML prima in variabelen en echo's worden opgenomen. Ook hier komen de punten om delen aan elkaar te knopen, de verschillende soorten aanhalingstekens en de backslashes weer naar voren.

Laten we onderstaande HTML-code eens als voorbeeld bekijken. Op de plek van [getal] willen we met behulp van een variabele een door PHP bepaald getal opnemen:

<span style="color:#FF0000;">Je bent de [getal]e bezoeker van mijn website.</span>

Als we dubbele aanhalingtekens voor de echo gebruiken, moeten de aanhalingstekens die bij het attribuut style horen geëscapet worden met een backslash en moeten punten gebruikt worden om de variabele en de letter e te scheiden:

echo "<span style=\"color:#FF0000;\">Je bent de " . $bezoeker . "e bezoeker van mijn website.</span>";

Gebruiken we enkele aanhalingstekens, dan hoeven de dubbele aanhalingstekens die bij de HTML-code horen niet meer geëscapet te worden, maar moeten we nog steeds punten om de variabele heen gebruiken:

echo '<span style="color:#FF0000;">Je bent de ' . $bezoeker . 'e bezoeker van mijn website.</span>';

Welke aanhalingstekens moet je nu gebruiken? Daar is geen harde regel voor, maar probeer te voorkomen dat je aanhalingstekens moet escapen. Het escapen van aanhalingstekens komt de leesbaarheid niet ten goede. Aangezien er regelmatig HTML in een string voor komt, geeft de auteur er de voorkeur aan om in principe enkele aanhalingstekens te gebruiken. In gevallen wanneer dat niet handig is, wordt uitgeweken naar de variant met dubbele aanhalingstekens.

PHP en HTML in één Bestand Combineren

Voor een enkele regel HTML is een echo nog wel te doen. Het is echter geen doen om een hele website als echo in PHP op te nemen. Iedere website kent wel stukken waar PHP 'even niet nodig is'. Door slim gebruik te maken van de PHP-tags (<?php en ?>, zie hoofdstuk 1) kan voorkomen worden veel HTML in een echo te moeten plaatsen.

Zodra PHP even niet meer nodig is, wordt de ?> tag geplaatst en zodra weer met PHP verder wordt gegaan komt eerst weer even <?php. Alles wat niet tussen <?php en ?> staat wordt als een normaal HTML-bestand beschouwd, ook al wordt de .php bestandsextensie gebruikt. Zo is het zelfs mogelijk om een PHP-bestand te hebben zonder dat hier ook maar één regel PHP-code in staat!

Het voorbeeld uit de voorgaande paragraaf zou dus ook als volgt kunnen worden geschreven (inclusief de rest van een HTML-pagina):

<?php

//Hieronder normaal de code om de bezoekers te tellen. In dit voorbeeld stellen we voor het gemak $bezoekers even gelijk aan 32.
$bezoekers = 32;

?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Titel van webpagina</title>
</head>
<body>

<span style="color:#FF0000;">Je bent de <?php echo $bezoeker; ?>e bezoeker van mijn website.</span>

</body>
</html>

Zelftest

  1. Wat is het verschil tussen print en echo?
    1. Er is geen belangrijk verschil.
    2. print stuurt een document naar de printer en echo niet.
    3. echo herhaalt wat bij de laatste print-functie is weergegeven.
    4. De voorkeur van de schrijver van dit boek ligt bij print en niet bij echo.
  2. Welke van onderstaande stellingen is/zijn waar?
    I             echo kan de waarde van een variabele aanpassen;
    II            Een punt koppelt twee variabelen aan elkaar.
    1. Beide stellingen zijn onwaar.
    2. Alleen stelling I is waar.
    3. Alleen stelling II is waar.
    4. Beide stellingen zijn waar.
  3. Welke van onderstaande stellingen is/zijn waar?
    I             Dubbele aanhalingstekens zijn 'slimmer';
    II            \n in combinatie met enkele aanhalingstekens voegt een nieuwe regel in de broncode in.
    1. Beide stellingen zijn onwaar.
    2. Alleen stelling I is waar.
    3. Alleen stelling II is waar.
    4. Beide stellingen zijn waar.
  4. Wanneer moeten aanhalingstekens geëscapet worden?
    1. Altijd.
    2. Alleen als beide typen door elkaar gebruikt worden.
    3. Als er een variabele in een tekststring wordt opgenomen.
    4. Als een aanhalingsteken niet het einde van een tekststring aangeeft.
  5. Wat is de bestandsextensie van een PHP-script dat alleen HTML bevat?
    1. .html
    2. .phtml
    3. .php
    4. .script

Antwoorden zelftest

Antwoorden

  1. a
  2. c
  3. b
  4. d
  5. c