PHP Basics

CMD FED Y2Q2W2 Lesbrief

Leerdoelen

De PHP syntax

Je kan PHP code overal in een html pagina plaatsen. PHP tags hebben een openingstag en een sluitingstag. Alles wat tussen deze tags staat is dus PHP code. Zie onderstaand syntax voorbeeld, waarbij de code in het rood de openings- en sluitings tag bevat:

<?php 
	echo ("dit is een <h1>voorbeeld</h1>");
	print ("dit is een <h1>voorbeeld</h1>"); //print heeft de voorkeur
?>

In bovenstaand voorbeeld zie je dat er met behulp van de instructies echo en print informatie naar het scherm wordt gestuurd, waarbij de informatie is geplaatst tussen ronde haken en (dubbele) quotes. Je kunt op die manier dus ook html tags naar je scherm sturen, je kunt zelfs op die manier een hele html pagina 'voor bakken' en naar je beeldscherm sturen.

Wat is hierbij het verschil tussen de syntax van Javascript en PHP ?
Als je met behulp van Javascript iets op het scherm wil krijgen gebruik je document.write(). In PHP kan dit op verschillende manieren, maar de meest gebruikte manier is wel print zoals in bovenstaand voorbeeld. Je schrijft print met daarachter tussen een of twee accolades de tekst. LET OP: Hier komen dus geen haakjes bij kijken! Ander belangrijk punt is de punt komma (;) aan het einde van een instructie. Zonder deze ";" geeft PHP foutmeldingen.

Commentaar

Net als in Javascript is het handig als je wat uitleg tussen je regels met code door kan typen; dit werkt hetzelfde als in PHP:

<?php

//Hier dan wat commentaar

/* Hier zijn een paar regels met tekst tot commentaar gemaakt. */ # ander commentaar ?>

Concatenation

Concatenation betekent het aan elkaar 'plakken' van gegevens. Dit kunnen teksten zijn (string concatenation) maar je kunt ook variabelen gebruiken.

<?php

// Voorbeeld string concatenation
print ("Dit tekstblok wordt geplakt aan " . " <h2>dit tekstblok</h2>"); // Nog een voorbeeld
$blok = "aangeplakt stuk tekst"; print ("nog een voorbeeld met een variabele: " . $blok); ?>

Escape characters

Verhaal omheen maken: Escape characters gebruiken: \r\n (crlf)
Escapen van quotes en doublequotes met \

 

Quotes en double quotes

Het is toegestaan in PHP om single en double quotes te gebruiken.
Dus:

<?php 
  print ('hello world'); 
print ("hello world");
?>

is allebei OK. Je mag ze niet door elkaar gebruiken binnen 1 statement, dus onderstaande code is niet toegestaan:

<?php
print ("hello world'); //begint met double quota en eindigt met single quote
?>

Als je in een stuk tekst quotes gebruikt en je wil deze tonen op het scherm, dan kun je dit als volgt doen:

<?php
  // deze code wordt goed uitgevoerd omdat de single quote wordt gezien als onderdeel van de string
print ("welkom in Harry's bar");
?>
<?php
  // deze code geeft een error door het gebruik van 3 single quotes
print ('welkom in Harry's bar');
?>
<?php
  // deze code wordt goed uitgevoerd omdat de single quote achter Harry wordt ge-escaped met een \ backslash
print ('welkom in Harry\'s bar');
?> <?php // deze code wordt goed uitgevoerd omdat de double quotes om Waldolala worden ge-escaped met een \ backslash
print ("welkom in \"Waldolala\"");
?>

Include en require

Wanneer je een website hebt met een vaste paginaindeling voor meerdere pagina's, dan kan het handig zijn dat je bepaalde delen in aparte bestanden gaat opslaan. Zo kun je een apart bestand maken voor je menu of voor je header en footer. Hiermee heb je als voordeel dat je bepaalde delen van je website maar een keer hoeft te maken en dus bij onderhoud maar 1 bestand hoeft aan te passen.

PHP kent vier manieren om te includen.

* include('/bestandspad/bestandsnaam/')
* require('/bestandspad/bestandsnaam/')
* include_once('/bestandspad/bestandsnaam/')
* require_once('/bestandspad/bestandsnaam/')

include() en require() verschillen in zoverre van elkaar dat include() bij een fout een foutmelding genereert en require() leidt tot een fatale fout en het afbreken van het script.

include_once() en require_once() gebruik je als het bestand om te includen maar eenmaal gebruikt gaat worden. Dit kan bijvoorbeeld een bestand zijn waar je je constanten in definieert, of een bestand wat al je functions bevat.

Wat mag je includen?

Je mag in principe alle soorten documenten includen. Een .txt, een .html of een .PHP bestand mag worden geincluded. Veel PHP schrijvers geven een te includen bestand de extentie .inc mee. Als je dit doet moet de bestandsextentie .inc dezelfde functionaliteit hebben op je webserver als .php! Als dit niet het geval is (dus als .inc niet is geregistreerd als php) dan wordt het automatisch als een textbestand behandeld! Dit kan gevaarlijk zijn als er passwords instaan. Het is daarom beter om bestanden, die ge-include worden, .php als bestandsextentie te geven. Dan blijft de code op de server! Je kunt wel de naam met inc opsieren, bijvoorbeeld inc_connection.php of inc_header.php.

Dit is hoe de (niet valide) HTML er van een webpage uit zou kunnen zien

<html>
<head> <title>Mijn website</title> </head> <body> <div id="top"><h1>De top van de website</h1></div> <div id="content"><p>De content van de website</p></div> <div id="bottom"><h2>De bottom van de website</h2></div> </body>
</html>

Als de titel van de website en de inhoud van de div 'top' altijd hetzelfde zijn, dan kun je voor een bepaald gedeelte van de html een apart bestand maken.
Zo kun je een bestand inc_header.php maken met de volgende inhoud:

<html>
<head> <title>Mijn website</title> </head> <body> <div id="top"><h1>De top van de website</h1></div>

Als de div 'bottom' ook altijd hetzelfde is dan kun je vanaf die div tag tot aan het einde van de pagina ook een apart bestand maken.
Deze zou je inc_bottom.php kunnen noemen met de volgende inhoud:

 		<div id="bottom"><h2>De bottom van de website</h2></div>
	</body>
</html>

De PHP pagina gaat er nu als volgt uit zien en kan als template worden gebruikt voor al je andere webpages van je site.
Zo kun je onderstaande code opslaan als home.php
Vervolgens kun je de code nog een keer opslaan als contact.php en alleen de content in de betreffende div aanpassen.

<?php
include('inc_header.php');
?>
<div id="content"><p>De content van de website, bijvoorbeeld de homepage</p></div> <?php
include('inc_footer.php');
?>

Bij uitvoeren van home.php en contact.php wordt nu de html gegenereerd uit de includes. Het enige wat je nu per pagina aan moet passen is het gedeelte met de div die hierboven 'content' wordt genoemd. Wanneer je nu in de header of in de footer een aanpassing doet, dan hoef dat dus maar een keer en het is direct aangepast in de andere pagina's waar de includes ook worden toegepast. Stel nu dat je bijvoorbeeld een menu wilt toevoegen aan de bovenzijde van je pagina, dan maak je daar een div voor met id 'menu', je plaatst je menuitems in die div en je voegt deze in 'header.inc' toe, na de <body> tag.
Het nieuw ingevoegde menu verschijnt nu op iedere pagina waar 'header.inc' is ge-include..


Variabele

Als je een variabele wil aanmaken dan doe je dat door er een dollarteken voor te plaatsen, zie voorbeeld:

<?php 
	$mijnVar = 3;
	print ($mijnVar);
?> 

mijnVar hoeft na de print nu niet tussen dubbele aanhalingstekens omdat mijnVar een variabele is. Twee variabelen optellen gaat ook iets anders, in PHP gebruik je bij combineren van tekst in plaats van een plus een punt.

<?php 
	$txt1="Dit is een verhaaltje"; 
	$txt2="1234"; 
	print $txt1 . " " . $txt2 ; 
?> 

Array

Een array is een byzondere en een belangrijke variabele. Je kunt in een array meerdere gegevens kwijt die je wel weer individueel kan benoemen en herleiden. Je kunt een array een beetje zien als een matrix of een database table. Omdat je in PHP vaak met gegevens werkt die uit een database komen is de array zeer geschikt om als container te dienen voor die gegevens. Ook gegevens uit formulieren worden in een array opgeslagen.

Een array is een variabele met een naam. Als je meerdere gegevens in die array wilt plaatsen kun je gebruik van nummertjes (de zogenaamde indexed array) of naampjes (de zogenaamde associative array):


Indexed array

Net als JavaScript kent PHP ook de indexed array. Elke waarde in zo'n array heeft een index nummer. Deze index begint altijd bij 0! Van de onderstaande array, zijn de index nummers als volgt:

	friends = new Array ('Clark', 'Lois', 'Zorro');
	Index   	Value
	------------------------
	0       	Clark
	1      		Lois
	2       	Zorro

Je kunt een waarde uitlezen door te refereren naar het index-nummer. Dit index nummer plaats je tussen rechte haken.

	$friends = array (
		'Clark', 
		'Lois', 
		'Zorro'
	);
	
	print ($friends[0]); // Will return: Clark
	print ($friends[2]); // Will return: Zorro

Associative arrays

PHP kent naast indexed ook associative arrays. Elke waarde in een array heeft een 'sleutel' (key). Deze sleutel is een string en je kunt zelf bepalen hoe deze sleutel is samengesteld. Van de onderstaande array, is de index nummers als volgt:

	$friends = array ('superman' => 'Clark Kent', 'spiderman' => 'peter', 'batman' => 'tja');
	
	Key          Value
	------------------------
	superman     Clark Kent
	spiderman    peter 
	batman		 tja

Je kunt een waarde uitlezen door te refereren naar de sleutel. Deze sleutel plaats je als string tussen rechte haken.

	$friends = array (
		'superman' => 'Clark',
		'spiderman' => 'Peter',
		'batman' => 'boe'
	);	
	print ($friends['superman']); // Will return: Clark

Opmerkelijk is dat bij het opvragen van het aantal array entries .length niet werkt in PHP.
In dat geval gebruik je de functie count();

	$count = count($array);

Er zijn nog veel meer manieren om met array's om te gaan in PHP. Je kunt deze bekijken op PHP.net, zie http://nl3.PHP.net/manual/en/language.types.array.PHP

If / else construct

Een conditional statement werkt op dezelfde manier als in javascript. (conditional statement is if / else ) Bij PHP is het echter heel erg belangrijk dat je de puntcomma aan het einde niet vergeet! Wanneer je dat wel doet, krijgt je een foutmelding.

<?php 
	$mijnVar = 3;
	if ($mijnVar == 4) {
	  print $mijnVar;
	}  else {
	  print "ongelijk aan 4";
	}
?>

Loops

Ook loops werken hetzelfde als in javascript, met als enig verschil dat er nu voor elke variabele een dollarteken staat:

for

De syntax voor de for en while-loop is hetzelfde als in JavaScript.

// Syntax
<?php 
	for ([initialization]; [condition]; [increment]){
		[code to be executed];
	}
?>
// Example
<?php 
	for ($counter = 0 ; $counter < 10; $counter){
		print ($counter . '<br/>');
	}
?>

Foreach

// Syntax
foreach ([array] as [value]){
	[code to be executed];
}

// Syntax (for associative arrays)
foreach ([array] as [key] => [value]){
	[code to be executed];
}

<?php 
	//Example (for indexed arrays)
	$friends = array (
		'Clark',
		'Lois',
		'Zorro'
	);
	foreach ($friends as $value) {
	    print ($value);
	}

	//Example (for associative arrays)
	$friends = array (
		'superman' => 'Clark',
		'spiderman' => 'Peter',
		'batman' => 'John'
	);

	foreach ($friends as $key => $value) {
		// Print the values of the array, 
		//and the keys!
		print ($key . ': ' . $value . '<br/>)';
	}
?>

While

while ([condition]){
	[code to be executed];
}
$i = 10; // variabele $i wordt op 10 gezet

while ($i > 0) { 
	// zolang $i groter is dan 0 wordt onderstaande code uitgevoerd  
	print ($i . '<br/>)';
	$i = $i - 1; // $i wordt met 1 verlaagd 
}  

Lesoefening

Probeer hoe PHP omgaat met quotes en doublequotes.

Voorbeeld:

Arjo’s lijfspreuk is: "bezit van de zaak is ’t einde van ’t vermaak".
Probeer dit maar eens met PHP te echo-en of printen naar het scherm!