Gebruikerslogin

Nu online

Er zijn momenteel 1 gebruiker en 17 gasten online.

Enquête

Wat is leuker?
White hat SEO
70%
Black hat SEO
30%
Totaal aantal stemmen: 98

PHP voor beginners: Deel 1 van 3

Erik-Jan Bulthuis

23 november 2006

Opmerking:
Deze tutorial is het laatst geupdate 23 november 2006. In eerdere stadia zijn enkele passages en/of correcties aangebracht door Willem-Jan van Dinter, waarvoor hartelijk dank.

Deze cursus bestaat uit 3 delen.

Inhoudsopgave

  1. Wat is PHP?
    1. De geschiedenis van PHP
    2. Wat kun je met PHP?
    3. Waarom PHP?
  2. Server side scripting
    1. Client side/server side
  3. PHP Syntax
    1. PHP & HTML
    2. Commentaar
    3. Variabelen
    4. Output
  4. Variabelen
    1. Integers & doubles
    2. Strings
    3. Booleans
    4. Arrays
    5. Objecten
  5. Controle structuren
    1. If, else & elseif
    2. For-loop
    3. While-loop
  6. Functies
    1. Voorgedefinieerde functies
    2. Zelf functies maken
  7. Enkele losse opmerkingen
    1. Databases
    2. PHP testen
      1. PHP lokaal draaien
      2. PHP installeren
      3. Hosting services
    3. Bronnen
  8. literatuurlijst

1. Wat is PHP?

PHP is een server-side scriptingtaal. Een server-side scriptingtaal is een stuk software dat draait op de server en de instructies in de scripts verwerkt. Als alle instructies zijn uitgevoerd wordt de door de bezoeker opgevraagde pagina samengesteld en als HTML-pagina verzonden naar de bezoeker. Hieronder zie je dit alles schematisch weergegeven.

PlaatjeServerSideScripting.gif

Figuur 1: Overzicht HTTP-verzoek

Het werkt als volgt:

  • Zodra de bezoeker een internetadres in zijn of haar browser typt of op een link klikt, gaat er via pijl 1 een verzoek naar de server. Dit verzoek gaat uiteraard via het internet.
  • Vervolgens zoekt de server het juiste bestand op, en afhankelijk van de configuratie van de server zal deze het bestand wel of niet doorgeven aan de php-parser. Dit is pijl 2. Merk trouwens op dat de php-parser in de praktijk geen andere fysieke machine is: vaak is de php-parser een modulaire extensie van de webserver.
  • De php-parser zet alle PHP-code om in HTML en geeft het resultaat aan de webserver terug. Dit is pijl 3. Omdat de uiteindelijke HTML-code in de browser van de bezoeker verschijnt, is het nooit mogelijk de originele PHP-code te achterhalen als je je server goed beveiligd en geconfigureerd hebt.
  • Tenslotte stuurt de server het HTML-bestand dat van de script-machine komt terug naar de bezoeker. Dit is pijl 4.

Opmerking:
In de praktijk zal dit niet het hele verhaal zijn. Vaak zal er achter de script-parser nog een database zitten zodat de script-parser daar data uit kan halen of er juist in kan stoppen. Aangezien deze tutorial niet over MySQL, PostGreSQL, ODBC of een andere database gaat, ga ik hier verder niet op in.

1.1 De geschiedenis van PHP

Eind 1994 wilde Rasmus Lerdorf, ontwikkelaar van de server-technologie van Apache, bijhouden wie er allemaal op zijn persoonlijke site langs kwam. Hij ontwikkelde een aantal scripts gebaseerd op Perl CGI-technologie. Deze scripts noemde hij om begrijpelijke redenen Personal Home Page Tools (PHP Tools). Een aantal mensen die toevallig op zijn site kwamen, zagen de scripts en begonnen het te gebruiken op hun eigen site. Dit waren de eerste gebruikers van een technologie die zich later zou ontwikkelen tot één van de meest populaire server side scripting talen.

Groei

Omdat de scripts erg gebruiksvriendelijk en overzichtelijk waren steeg het aantal sites met PHP-technologie snel. Het ontwikkelen van PHP werd te veel voor Lerdorf alleen en er ontstond een groep mensen die zich hier mee ging bezighouden. Aangezien PHP open-source technologie is, wordt dit team gesteund door duizenden initiatieven en ideeën van PHP-ontwikkelaars van over de hele wereld. Inmiddels maken enkele miljoenen sites gebruik van PHP wat ondertussen is omgedoopt tot PHP: Hypertext Preprocessor.

Met het oogpunt op eenvoud heeft de bedenker ervoor gezorgd dat de scripts als het ware als in een template-engine gewoon in de HTML-code kon worden geplaatst. PHP is dus tevens als template-engine bedoeld. Vele temlpate-engine's als smarty.php.net die logische code ondersteunen, zijn dus in feite template-parsers in een template-parser.

Zend

Een interessant stuk PHP-geschiedenis heeft zich voorgedaan bij een initiatief genaamd Zend.com. Dit bedrijf ontwikkelt nog steeds technologie om de performance van de PHP-technologie te verbeteren.

De inzet van Zend heeft ervoor gezorgd dat PHP tegenwoordig meer is dan enkel een template-engine, zon ondersteund PHP5 volledig het OOP stelsel.

1.2 Wat kun je met PHP?

Aan het begin van deze artikelenserie zal ik het verschil tussen statische webpagina's en dynamische webpagina's moeten uitleggen. Een statische webpagina is een pagina die volledig geschreven is in HTML en er ten allen tijde dezelfde hetzelfde uit zal zien. De inhoud zal zich niet aanpassen aan de tijd, nieuwsberichten, het weer of een andere omstandigheid.

Een dynamische pagina is dan logischerwijs een pagina die zich wél aanpast aan bepaalde omstandigheden. Zo'n omstandigheid kan iets te maken hebben met een database, bijvoorbeeld de omstandigheid dat er een nieuw nieuwsbericht in de database staat levert andere headlines op, maar het het zou ook de omstandigheid kunnen zijn dat het avond is en dat de bezoeker dus begroet wordt met goedenavond in plaats van goedenmorgen. Je kunt je voorstellen dat ik veel meer van deze omstandigheden zou kunnen bedenken die een bepaald proces in beweging zetten, maar ik denk dat je het nu wel redelijk op een rijtje hebt.

Server side > client side

Na het voorgaande zul je misschien gaan verwachten dat ik ga zeggen dat PHP (of welke andere server side scripting taal dan ook) in staat is dynamische pagina's te genereren. Dit is zeker waar en dit statement wil ik ook wel maken, maar niet zonder de volgende kanttekening te maken: een client side scripting taal als Javascript of VBScript is ook in staat om dynamische pagina's te creëren of dynamiek aan de pagina toe te voegen. Het voorbeeld dat ik net gaf aangaande de groet goedenavond of goedenmorgen is prima te verwezenlijken met Javascript.

Waar Javascript echter niet in staat is om de 'grotere' dynamische toepassingen te verwezenlijken. Javascript of een andere cliënt side technologie kan niet omgaan met databases of op een andere manier informatie uit diverse bronnen samenvoegen. Ook voor grotere en CPU-intensieve toepassingen is Javascript niet of nauwelijks geschikt.

Een client side scripting taal kan ook moeilijk gegevens onthouden. Een gastenboek waarbij een nieuwe entry moet worden toegevoegd is niet op te slaan door een client side scripting taal. Dit nadeel zet zit in enorm veel applicaties door.

Javascript mist ook een stuk interactie. Uiteraard kunnen we met Javascript wel wat teksten of plaatjes veranderen als we onze muiscursor over een bepaalde link bewegen, maar probeer maar eens voor elke pagina die we bezoeken een persoonlijke achtergrondskleur te gebruiken. Dit zal werken voor 1 pagina, maar Javascript is niet in staat om de kleur te onthouden zodra wij ons naar een andere pagina begeven. Hiervoor zijn dan wel weer cookies ontwikkeld, maar het is ondoenlijk om een heel personificatie-systeem in cookies te bewaren!

PHP kan dat wél!

Nu komen we ergens. We hebben een aantal gebieden gezien waarin client side scripting talen te kort schiet. PHP kan het tekort hierin opvangen en is dus in staat tot het creëren van applicaties als nieuws-systemen, email-applicaties, forums en gastenboeken, kalenders en agenda's, ftp-systemen, rekenmachines enz. Erg veel mogelijkheden dus!

1.3 Waarom PHP?

Zoals je bijvoorbeeld al in figuur 1.1 had kunnen zien is PHP niet de enige server-side scripting taal. Het is ondoenlijk om het rijtje compleet te maken maar naast PHP hebben we nog ASP, JSP, ColdFusion, Perl enz. enz. enz.

Toch ben ik van mening dat PHP en groot aantal punten voor heeft op 1 van deze andere talen:

  • PHP is als open-source zijnde gratis te downloaden. Ook als je bij een hosting service een account neemt zul je in veel gevallen het prijsverschil merken.
  • PHP is erg makkelijk te leren. Hier kunnen we over praten en vergelijken wat we willen, maar feit blijft dat PHP erg vergevingsgezind is en dat geen enkele andere server-side scripting zo makkelijk met de verschillende typen variabelen omgaat.
  • PHP is snel. Zeker de laatste versies van PHP draaien snel en stabiel op vooral UNIX-systemen. Hier komt echter weer een ander voordeel om de hoek kijken: ook op een Windows-machine draait PHP prima, al zijn er wel aardig wat beperkingen in de functionaliteit.
  • PHP heeft een grote fan-club achter zich geschaart. Het aantal resource-sites met tutorials, broncodes en vaak vriendelijke forum-bezoekers is al niet meer te tellen en stijgt nog steeds explosief. Zonder twijfel zijn er meer Nederlandstalige tutorials verkrijgbaar over PHP dan over ASP of Perl.

Dit lijstje is nog langer te maken maar om niet te veel bomen te planten zodat we het bos niet meer zien, zal ik het bij deze belangrijke voordelen laten.

Fans van ASP of Perl zullen weer genoeg goede argumenten hebben om je te proberen te overtuigen van hun geliefde taal. Zo zullen veel bedrijven gebruik maken van ASP omdat het van Microsoft is en als dusdanig "wel goed zal zijn". De keuze voor een bepaalde taal is erg persoonlijk getint, maar iedereen zal het er over eens moeten zijn dat PHP voor beginners het makkelijkst aan te leren is.

2. Server side scripting

Zoals al gezegd in paragraaf 1.2 maakt de server een HTML-pagina die wordt teruggestuurd naar de browser van de bezoeker. Meestal worden hiervoor verschillende databases geraadpleegd om hier data uit te lezen of juist in te zetten. Hoewel het niet altijd als dusdanig wordt gezien zijn tekstbestanden natuurlijk ook gewoon databases op hun smalst.

Misschien is het goed om even duidelijk te maken dat de technologie die PHP-pagina's omzet in HTML niet door de ontwikkelaars van de taal PHP worden ontwikkeld maar door Zend.com. Het samenwerkingsverband tussen beide partijen is erg nauw, maar strict genomen zijn het twee verschillende instanties.

Een andere opmerking die even gemaakt moet worden is dat PHP erg goed samenwerkt met de database MySQL (of PostGreSQL of mSQL) en de serversoftware Apache. Dit succestrio (PHP, MySQL en Apache) is gratis te verkrijgen en werkt het best op een UNIX-machine. Hierover meer in paragraaf 7.2.2.

2.1 Client side/server side

Misschien heb je wel eens iets gelezen over de "ruzie" tussen designers en developers. Ruwweg kun je het als dusdanig zien dat de designers zich bezig houden met client side technologie en developers met server-side technologie. Dat dit vaak botst (designers kunnen bijvoorbeeld geen PHP-code invoegen in HTML-bestanden en developers krijgen de benodigde content niet in de te krap ontworpen tabellen) zal duidelijk zijn.

Met deze inleiding van deze paragraaf wordt (hopelijk!) meteen duidelijk wat het verschil is tussen client-side technologieën en server-side technologieën is. Client-side technologieën als (X)HTML, Javascript, CSS en DHTML zijn primair gericht op de layout van een webpagina. Server-side technologieën zijn veel meer gericht op het verzamelen en ordenen van de informatie of content van de webpagina.

Ik heb in paragraaf 1.2 al geschetst wat je met server-side scriptingtalen allemaal kan. De enige opmerking die ik in deze paragraaf nog even wil maken als aansluiting op het voorbeeld van de designer-developer-ruzie is dat een fatsoenlijke website noch zonder design noch zonder content kan.

3. PHP Syntax

PHP is erg simpel te schrijven. Zeker als je al wat ervaring hebt met een programmeer- of scriptingtaal zul je binnen een paar uur al PHP-code herkennen en de meest basis dingen zelf kunnen schrijven. Vooral diegenen met een C of C++ achtergrond zullen een groot deel van de syntax herkennen.

Editors

Niet alleen PHP is gratis, maar ook de software om PHP te schrijven is desgewenst helemaal gratis. Net zoals HTML kun je PHP-code schrijven met een zogenaamde editor. Je zou zelfs Kladblok kunnen gebruiken, maar ik prefereer toch het gebruik van een editor omdat deze een hele mooie eigenschap heeft: color highlighting. Dit betekent dat de editor bepaalde stukken code een afwijkende kleur geeft zodat de code snel te overzien is. Een voorbeeld van deze color highlighting zie je hieronder.

<?php
if (!empty($_POST['submit']){
   
// Code om ingevuld formuliertje te verwerken
}else{
 
// Toon formuliertje
}
?>

Enkele andere voordelen van editors boven Kladblok zijn:

  • Je hebt een aantal handige tools tot je beschikking. Zo hebben veel editors de mogelijkheid om een "matching brace" te vinden. Dit betekent dat je één { of } selecteert en dat de editor vervolgens de corresponderde brace geeft.
  • Een ander voordeel is dat je met een editor een heel project kan beheren. Dit geeft je bepaalde vrijheden als het gaat om de parsing van de codes of het gebruik van verschillende servers voor verschillende projecten. Vaak zit er in de editor ook een FTP programma, wat het werken nog makkelijker maakt.
  • Er zijn nog meer voordelen van editors boven Kladblok zoals standaard scripts met 1 klik toevoegen of het testen van slechts een deel van de code, maar ik hoop dat ik je nu al overtuigd heb om even een editor te downloaden.

Ik zelf maak gebruik van de gratis editor PHP Coder Pro!. Voor het adres om deze en andere editors te downloaden kun je even bij de bronnen kijken. Het is trouwens op dit moment, vlak voor we onze eerste code gaan schrijven (!), handig om even te vertellen hoe je de codes uitvoert. Kijk hiervoor even in paragraaf 7.2.

Extensies

De server zal een bestand moeten herkennen als php-bestand om het naar de script-machine te sturen. Hiervoor moet het bestand de juiste extensie hebben. Welke extensies dit mogen zijn ligt aan de instellingen van je server, maar .php zal in ieder geval in orde zijn. Alle voorbeeldbestanden die volgen kun je daarom het beste opslaan als bestandsnaam.php.

3.1 PHP & HTML

PHP-code kun je gewoon tussen de HTML-code zetten. HTML-code kun je dus ook intypen in de PHP-editor die je net hebt gedownload. Het is dan wel nodig om aan de server duidelijk te maken dat een bepaald deel van het .php-bestand PHP-code is. Dit doen we door voor de PHP-code de openingstag <?php te zetten en de code af te sluiten met ?>.

Het is ook mogelijk om de PHP-code te omsluiten door de tags <? en ?>, maar omdat dit ook de tags zijn die ASP kan gebruiken kan dit tot verwarring leiden op servers die zowel PHP als ASP ondersteunen. Ook de openingstag <SCRIPT LANGUAGE=php> en de sluittag </SCRIPT> zijn mogelijk al worden deze in de praktijk bijna nooit gebruikt. Ik zal me in deze tutorial beperken tot <?php en ?>.

Ook de andere kant op kun je PHP en HTML samen gebruiken. HTML-tags zijn prima in te passen in PHP-scripts. De script-machine parset de PHP tot HTML en laat de HTML die al tussen de PHP-code stond gewoon staan. Op deze manier kun je de layout van de HTML-output bepalen.

3.2 Commentaar

In het voorbeeld bij het kopje editors van hoofstuk 3 zag je twee oranje regels die begonnen met //. Deze regels betreffen commentaar in het script dat verder geen effect heeft op de werking of output van het script. Het nut van commentaar is dan ook alleen verduidelijking voor iemand die de originele PHP-code leest. Het dient als verduidelijking van het script. Commentaar beginnend met // of # mag niet over meerdere regels gespreid worden. Als je dat toch wilt zul je óf voor elke regel opnieuw // of # moeten zetten of je zult gebruik moeten maken van de combinatie van de openingstag /* en de sluittag */. Dit commentaar mag over meerdere regels gespreid worden zoals je ziet in onderstaand voorbeeld.

<?php
/* Dit is commentaar verspreid over meerdere regels.
   Vergeet niet de commentaar-modus af te sluiten omdat anders
   de rest van het scripts niet geparsed zal worden!
*/
?>

Het nut van commentaar

Een goede programmeergewoonte die je niet vroeg genoeg aan kan leren is om veel commentaar toe te voegen in je scripts. Het kan zo zijn dat je je script op het moment van schrijven prima begrijpt, maar als je het later moet wijzigen is dat misschien niet zo. Op zo'n moment is het erg handig om door het nalezen van je commentaar een idee te krijgen hoe je script ook al weer in elkaar zat.

Een andere reden om royaal met je commentaar te zijn is in het geval dat je met meerdere mensen aan één script werkt. Wat logisch is in jouw denken, hoeft niet zo logisch te zijn in het denken van je collega of partner. Te veel commentaar kan geen kwaad; het leidt niet tot snelheidsverlies en er zijn ook geen andere nadelen aan verbonden.

3.3 Variabelen

Voor ik je iets kan vertellen over de syntax en het gebruik van variabelen, zal ik je eerst moeten vertellen wat variabelen zijn. Een variabele is een stukje geheugen met een bepaalde inhoud. Dit stukje geheugen wordt geidentificeerd met de naam van de variabele. De inhoud kan bestaan uit een stukje tekst zoals "tekst" (ook wel een strings genoemd) of een getal (integers of doubles). Ook meer ingewikkelde variabelen als booleans, arrays of objecten zijn in PHP mogelijk.

Als je een variabele wilt gebruiken kun je gewoon de naam van de variabele typen voorafgegaan door het dollarteken $. De naam van de variabele is case-sensitive wat betekent dat $naam niet hetzelfde is als $Naam. Verder mag de naam van de variabele alleen bestaan uit letters, cijfers en een underscore (_). Goede namen van variabelen zijn dus $naam, $_naam, $naam_1 en 3.

De waarde van een variabele is die van de laatste toekenning. Dit toekennen gebeurt door de statement:

<?php
$variabele_naam 
"waarde";
?>

Hier zie je overigens dat elke statement met een ; (punt-komma) moet worden afgesloten. Tenslotte is het op dit moment nog goed om te zeggen dat PHP-variabelen niet van te voren hoeven teworden gedeclareerd. Meer informatie over variabelen vind je in hoofdstuk 4.

3.4 Output

Uiteindelijk is het je bedoeling dat je iets in HTML terugstuurt naar de browser van de bezoeker. Hier heeft PHP 2 (bijna) equivalente functies voor namelijk echo "tekst"; en print "tekst";. Weliswaar zijn er kleine verschillen, maar in feite is er geen reden te bedenken waarom je één van de twee niet zal gebruiken. Vanwege persoonlijke gewoonte mag ik in deze cursus verder echo gebruiken.

Opmerking door Willem:
Omdat er personen waren die graag een antwoord op deze vraag hadden wat het snelste werkt, hebben ze een test uitgevoerd waaruit is gebleken dat bij enkele duizenden instructies de echo-instructie enkele honderdste van een seconden sneller is dan de print-instructie. Hier wil ik aan toevoegen dat de test zijn doel deels voorbij schiet, omdat het uitvoeren van duizenden echo- of print-instructie inefficiënt is, en het overzichtelijker is om 1000-en strings samen te voegen tot 1 complete string en deze te echoën.

Met de functie echo kun je dus tekst (ook HTML of Javascript!) naar de browser van de bezoeker sturen. Zoals je ziet staat de tekst-string tussen dubbele haakjes ". We hadden hier ook enkele haakjes ' voor mogen gebruiken, als we de tekst-string maar met dezelfde soort haakjes afsluiten als waarmee het ook geopend is.

Je moet er wel opletten dat er in het volgende voorbeeld iets fout gaat (wat je ziet aan de color highlighting):

<?php
echo "Dit gaat fout omdat er een " in de string zit";
?>

De PHP script-engine ziet dat je voor de functie echo gebruik maakt van de dubbele haakjes " om de string te omsluiten. PHP gaat er van uit dat de tweede " die PHP op de echo-regel tegen komt het einde van de tekst-string is. Na die tweede " stopt PHP met echoën terwijl er nog meer geëchoet moet worden!

Nu denk je misschien dat het hierom niet mogelijk is om een " te gebruiken in de echo-functie. Hierin heb je dan niet gelijk, maar we zullen er een trucje voor moeten gebruiken. Het trucje heet 'escapen' en betekent concreet dat we voor de " in de tekst-string een slash \ zetten. Op deze manier weet PHP dat " in de tekst-string niet het einde van de echo-functie moet zijn. Een correcte weergave is dan ook:

<?php
echo "Dit gaat fout omdat er een \" in de string zit";
?>

Opmerking door Willem:
Karakter-reeksen tussen dubbele quotes worden door de php-parser geëvalueerd op $variabelen, karakter-reeksen tussen enkele quotes niet, en iedere evaluatie vergt enkele microseconden.Omdat in de regels van HTML is beschreven dat HTML-attributen altijd tussen dubbele quotes dienen te staan, is het dus aan te raden om in de php-code de karakter-reeksen te omsluiten met enkele quotes, en de eventuele HTML attributen met dubbele quotes.
Moeten er $variabelen in de code worden geplaatst, onderbreek de karakterreeks dan met dezelfde enkele quotes zoals hieronder.
Moeten er enkele quotes worden geprint (voor bv javascript argumenten), dan dien je deze enkele quotes te escapen met een backslash.

<?php
echo '<a href="http://domein.nl/?pagina='.$pagina.'" title="ga naar '.$pagina_titel.'">'.$pagina_titel.'</a>';
?>