Docs

Voordat we ons gaan verdiepen eerst een aantal opmerkingen over de materialen die je ter beschikking staan tijdens deze cursus:

  1. Een Ubuntu-image die je kunt gebruiken om programma's bij de cursus te draaien.
  2. De PHP-IDE PhpStorm.

Aanvullend hierop heb ik de hulpdocumentatie van PHP.net op deze site geplaatst, zodat je gemakkelijk van uit deze pagina naar helponderwerpen kunt springen.

Voor deze cursus gebruiken we twee boeken:

  1. Arjan Burger, Handboek PHP 5.3, ISBN 978-90-5940-550-9, Culemborg 2012
  2. Peter Kassenaar, Handboek JavaScript & jQuery, ISBN 978-90-5940-614-8, Culemborg 2013

Op deze pagina worden een aantal symbolen gebruikt, met de volgende betekenissen:

  1. In de Ubuntu-image zijn twee servers gedefinieerd: http://localhost en http://localhost.test.nl. Op dat dat tweede adres vind je een script waarin je allerlei informatie over de lokale PHP-installatie kunt vinden én je kunt er snel even stukjes PHP-code testen.
  2. Het gebruik van de Ubuntu-image wordt verder mondeling toegelicht.
  3. Download-adressen van de images: \\dci\data\VMware\PHPJQueryStorm (image mét PhpStorm-installatie) en \\dci\data\VMware\PHPJQuery (image zonder PhpStorm-installatie, ten behoeve van reset).
  4. Let op: deze images eerst downloaden en pas uitpakken op je computer!

PhpStorm (PS) heeft heel er veel mogelijkheden, ik ontdek nog telkens nieuwe (leuke) verrassingen. Hieronder noem ik alvast een paar van de naar mijn smaak handigste functionaliteiten.

Let op: er staan hieronder dubbele toetsenbordcombinaties vermeld, waarbij de eerste combinatie telkens geldt voor de Mac en de tweede onder Linux. PS heeft een helpbestand waarin alle toetsenbordcombinaties vermeld staan. Via Keymap in de Instellingen van PS kun je zelf toetsencombinaties toekennen / wijzigen.

De debug-faciliteiten in PhpStorm zijn behoorlijk goed. Wil je debuggen in PhpStorm:

  1. Plaats dan een breakpoint door te klikken naast een regelnummer dat een statement bevat. Er verschijnt een rode cirkel naast het regelnummer en de regel wordt rood gemarkeerd:
    breekpunt
  2. Klik op het icoon waarmee je de debugmodus activeert: Activeer debugmodus
  3. Herlaad de pagina.

De mogelijkheden tot refactoring (properties, methoden etc. hernoemen, verplaatsen enzovoort) in PS zijn erg handig. Een paar voorbeelden:

  1. Klik op een eigenschap, variabele of methode en toets (Shift+F5) om die te hernoemen in heel je code.
  2. Je kunt ook een geselecteerd stuk code in een class verplaatsen naar een eigen methode of property, waaraan dan op de plek waar je selectie stond gerefereerd wordt. Rechtsklik op de selectie en kies dan voor: Refactor > Extract, en maak een keuze. Je kunt ook toetsenbordcombinatie toekennen aan deze acties (via Keymap in de instellingen van PS) om ze nog sneller uit te voeren.

Ook de mogelijkheden in PS om doorheen je code te navigeren zijn heel goed. Zelfs in een heel uitgebreid en complex project kun je meestal heel snel een specifiek bestand of stuk code terugvinden. De belangrijkste mogelijkheden:

  1. (Command+O) / (Ctrl+N): open een class
  2. (Alt+Command+O) / (Ctrl+Alt+Shift+N): open een symbol (d.w.z. een methode, functie, eigenschap of variabele)
  3. (Shift+Command+O) / (Ctrl+Shift+N): open een bestand. Dit werkt zó goed, dat ik meestal het Project-paneel van PS helemaal niet nodig heb om een bestand snel te kunnen openen.

PHP was oorspronkelijk een afkorting van Personal Home Page, maar staat tegenwoordig voor Hypertext Preprocessor. Met PHP-scripts kun je serverside en dynamisch content voor onder andere webpagina's genereren, die vervolgen naar de browser (client) wordt gestuurd.

Alhoewel PHP-codeblokken gewoon tussen de HTML van een pagina mogen staan, ben ik er persoonlijk een voorstander van om dat zoveel mogelijk te vermijden. Een pagina wordt anders al heel snel onoverzichtelijk en lastig te doorgronden. Er zijn manieren om de HTML van een pagina af te vangen en pas achteraf door PHP dynamisch te bewerken. Zie het voorbeeld hieronder en opdracht ...

$i = 1;
//wat we liever niet hebben (alhoewel het wél toegestaan is):
//($headings[1] betekent: item 1 uit de array $headings)
<html>
...
<body>
<h1><?php echo $headings[1]; ?></h1>
</body>
</html>

//manier om dit te omzeilen:

//start het afvangen van de "output buffer", d.w.z.
//de HTML die anders rechtstreeks naar de browser
//zou worden gezonden.
ob_start();
<html>
...
<body>
<h1>((headingh1))</h1>
</body>
</html>

//sla nu de gebufferde content op in een variabele.
$html = ob_get_clean();

//Deze variabele kunnen we nu bewerken
//en vervolgens echoën (naar de browser sturen):

$html = str_replace("((headingh1))", $headings[1], $html);
echo $html;

Tegenwoordig wordt op de meeste server de een of andere variant van versie 5 van PHP gedraaid. Deze versies hebben een goede ondersteuning voor OOP (Object geOriënteerd Programmeren).

Nadere informatie28-31

De naam van een variabele in PHP:

Nadere informatie31

PHP kent diverse typen variabelen: onder andere integers, strings, arrays, objecten. In het boek en in het PHP-helpbestand kun je er meer over lezen. Hier wil ik nu aandacht besteden aan een paar speciale, globaal beschikbare variabelen in PHP.

$_SERVER
Deze variabele is een array die allerlei informatie bevat over de server en in verband met de huidige pagina die vanaf de server geladen wordt.

opdracht Laad in je browser http::/localhost.test.nl, en bekijk daar wat er zoal gedefinieerd is in $_SERVER.

$_SESSION
In deze array kunnen allerlei sessiegegevens worden opgegeslagen door de programmeur. In de regel wordt er een cookie PHPSESSID gezet, dat verwijst naar de waarden die aan deze sessie gekoppeld zijn. Zodra de bezoeker de site verlaat vervalt het sessiecookie.
$_COOKIE
In deze array kunnen cookies worden opgeslagen. Bijvoorbeeld met $waarde = $_COOKIE['id'] ken je de waarde van een cookie met de naam 'id' toe aan $waarde. Met de PHP-functie setcookie() kun je een cookie instellen, waarna je met $_COOKIE de waarde ervan kunt aanpassen.
Nadere informatie29, 31-4

PHP kent vele operatoren, afhankelijk van voor welk soort variabele je ze wilt gebruiken. Lees alles daarover in het boek en in de hierboven aangegeven hulpinformatie. Lees zeker ook wat er in het boek te lezen staat over vergelijkingsoperators.

Omdat PHP niet strongly typed is, kunnen variabelen met operatoren zomaar in een ander type veranderd worden. Dat noemen we casting.

opdracht Snap je, na een en ander gelezen te hebben, de operators in onderstaande voorbeelden?

if ($naam == "haas")echo "haas";
if ($naam != "haas")echo "h(el)aas";
//welke waarde krijgt $restant:
$restant = 10 % 3;
//wat wordt de waarde van $text?:
$text = "hier gaan " . 'we dan';
//wat wordt de waarde van $getal?:
$getal = 2 ^ 5;
//wat is het verschil tussen deze de volgende twee statements (een fout daarin is in de praktijk snel gemaakt)?:
$test = 5;
//en
$test == 5;
//wat betekent dit:
$waarde -= 12;
Nadere informatie

Je kunt het verloop van een script op diverse manieren aansturen. De meest bekende constructies in deze zijn wel conditionele statements en lussen.

Nadere informatie

Waarschijnlijk ben je vanuit ASP al bekend met conditionele statements. Vandaar dat ik me beperk tot een eenvoudig voorbeeld.

$naam = "haas";
if ($naam == "haas") {
	//binnen dubbele aanhalingstekens wordt een
	//in de tekst verwerktevariabele gewoon geëvalueerd.
	//Voor betere leesbaarheid in een IDE kun je
	//er accolades omheen zetten.
	echo "Mijn naam is {$naam}!";
}
else {
	echo "Mijn naam is onbekend";
}

Ook met lussen ben je waarschijnlijk al vertrouwd. Ik beperk me daarom tot 3 eenvoudige voorbeelden:

Gebruik while bijvoorbeeld om een lus uit te voeren waarbij van tevoren niet vaststaat wanneer die lus zal ophouden (bijvoorbeeld bij meer aangetroffen bestanden de lus vaker doorlopen). Let wel op dat je niet in een oneindige lus terechtkomt:

$i = 1;
//met de punt-operator worden strings aan elkaar geplakt:
$image = $dir . "/image" . $i . ".jpg";
while (file_exists($image) {

	//verwijder de afbeelding:
	unlink($image);

	$i++; //d.w.z.: tel één op bij i

	//dit is een beveiliging tegen een oneindige lus:
	if ($i > 300) {
		//met het break-keyword wordt in PHP een lus afgebroken
		break;
	}

	$image = $dir . "/image" . $i . ".jpg";
}

Gebruik for bijvoorbeeld wanneer je de items van een array wilt aanpassen:

$count = count($array); //tel het aantal items in een array
for ($x = 0; $x < $count; $x++) {
	//plak een extra stuk tekst achter elk array-item:
	$array[$x] .= " toevoeging";
}

Met foreach is nog weer wat eenvoudiger toe te passen lus dan for:

foreach ($array as $key => $value) {
	echo "De waarde van het item " . $key . " is " . $value . "
\r\n"; }

Aan deze sectie wordt nog gewerkt

Aan deze sectie wordt nog gewerkt