25.02.2017. Nils Martin Aslaksen.

PHP (Php Hypertext Preprocessor)

PHP er et akronym for «PHP: Hypertext Preprocessor».

Det er et tjenerside-skriptspråk som kan brukes til å lage dynamiske og interaktive vev-sider.

PHP er et åpent, plattformuavhengig, gratis under GNU lisens, høynivå, objekt-orientert skriptspråk (interpreterende programmeringsspråk).

Tjener-orientering. Man kan si at PHP er et tjener-orientert språk som lager dynamiske vev-sider, som kjøres på tjeneren, og brukes til å sette sammen dokument-kodene, før de sendes til brukeren.
– (Til forskjell fra klient-orienterte språk som f.eks. Javascript, HTML, CSS som prosesserer dokumentet etter at det er lastet ned til klient-maskinen.)

Fordeler:
– Syntaksen ligner på vanlige programmeringsspråk som Perl, C, C++ og Java. Dette gjør PHP lett å lære for dem som kan programmering fra før av.
Og visa versa; dersom man lærer PHP kan en lett kjenne seg igjen i andre programmeringsspråk.
– PHP er laget spesielt for vevsider, (til forskjell fra Perl som kan brukes til mange andre formål.)
– Er ikke OS begrenset.
– PHP har stor utbredelse.
– Mange tjenere støtter PHP.
– PHP har innebygde databasefunksjoner med god støtte mot databaser og webteknologier.
– PHP er vanlig i mange publiseringssystem som f.eks. Joomla og WordPress.
– PHP enkelt å komme i gang med.
– PHP er tilgivende som kan være bra for nybegynnere.
Istedet for å avbryte med en feilmelding; gjør den ett eller annet istedet.
– Svak typing og automatisk konvertering mellom datatyper kan gjøre det enklere for nybegynnere.
– Muligheten til å blande HTML og PHP-kode gjør at man gradvis kan legge til dynamikk i eksisterende vevsider.
– Nye tilleggsmoduler og biblioteker kommer stadig som gjør det mulig å lage f.eks. grafikk, PDF-filer og filmsnutter dynamisk.
Ulemper:
– Syntaksen er vanskelig for vanlige folk å forstå.
– Man trenger tilgang til en konfigurert vevtjener.
– Svak typing og automatisk konvertering mellom datatyper kan føre til flere problemer enn det løser.
– PHP begynner å bli umoderne, med rotete og tvetydig lappeteppe av gammel og ny syntaks implementert som funksjoner. (F.eks. sammenlignet med Python.)

Vevsider

PHP-kode kan bl.a. inkluderes i vev-sider sammen med html, css og JavaScript.

Eksempel 1.

<html>
<body>

<p>Denne teksten er i ren html, 
og sendes direkte til klienten for visning.</p>

<?php 
echo 
"
<p>Denne teksten lages vha. echo-kommandoen i PHP.<br>
Forskjellen er at koden tolkes på vevtjeneren; og omgjøres til HTML.
Deretter deretter sendes resultatet til klienten for visning.</p>
"
?>

</body>
</html>

PHP-skript starter med starttagg <?php og avsluttes med sluttagg: ?>.
Koden legges inn i html-dokumenter, som må ha .php som filendelse (istedet for .html).

Koden kjøres på tjeneren, før resultatet lastes ned til nettleseren som ordinære html-koder.

Besøkende kan ikke se koden ved å klikke på «vis kilde» i nettleseren. Det er fordi tolkningen av PHP-koden skjer på tjeneren.


Eksempel 2. Kommandoen echo kan brukes til å skrive ut tekst til vevsiden.

<?php
echo "Hei "; echo("verden! ");
echo "<br>";
echo 'Hei og hå. ';
?>

echo  kan brukes med og uten parenteser.
"<br>"  gir en ny linje i html-kode.
Enkelfnutt kan i noen tilfeller brukes isteden for dobbelfnutt.

Legg merke til at instruksjoner avsluttes med semikolon;


Variabler

Variabler i PHP starter alltid med et $-tegn.

Variabler tilordnes en verdi med bruk av = tegnet, som betyr «settes lik».

Eksempel.

    $x=1;
    // Navnet ‹$x› settes til å peke på en beholder som tildeles verdien 1. 
    // I praksis sier man bare at x settes lik en.

    $abc = 123; 	// Variabelen $abc settes til tallet etthundre og tjuetre.
    $p = $abc; 		// Her settes $p til å være lik variabelen $abc som er 123.
    $q = "abc"; 	// Her settes $q til en tekststreng med teksten abc. 
    $r = abc; 		// Her settes $r til en tekststreng med teksten abc. 
    echo "$x $abc $p $q $r";

Legg merke til at tilordning av verdier til tekstvariabler bruker fnutter.

Doble skråstreker (//) er kommentartegn.

Kommandoen $r = abc; er tvetydig og bør unngås. Alle tekst-tilordninger bør ha fnutter.


// Flere variabler kan tilordnes en verdi samtidig:
$x = $y = $z = 1;  
// er ekvivalent med:
$x=1; $y=1; $z=1; 

Variabler i PHP er case-sensitiv. Det vil si at f.eks. x og X er to forskjellige variabler.

Variabler deklareres ikke i PHP. Det er ingen kommando for å deklarere en variabel, (til forskjell fra andre språk).
Variabler skapes idet de tilordnes en verdi.

Det anbefales å gi variabelen en utgangsverdi, men er ikke nødvendig.

Selv om variabelen er tilordnet et tall, kan den i neste omgang settes til å peke på en tekst.
Denne koden $x=1; $x="abc"; er gyldig;

Variablene er ikke typedefinert og kan dermed peke til alle typer objekter. PHP er såkalt svakt typet, ift. andre språk som har sterk typing; hvor de ikke bare må deklareres på forhånd, men en må også si hvilken type data variabelen skal inneholde.


echo

Kommandoen echo kan brukes for å skrive ut en variabel til vevsiden.

/* echo kan brukes for å skrive til vevsiden. */
$x = "abc";
echo $x;      # Skriver tekststrengen "abc".
echo "$x";    # Skriver tekststrengen "abc".
echo '$x';    # Skriver variabelnavnet $x.
echo "\$x";   # Skriver variabelnavnet $x.
Legg merke til at kommentarer kan skrives på tre ulike måter:
// doble skråstreker gjelder for en enkelt linje.
# dobbelkryss gjelder for en enkelt linje.
/* kommentar som kan gå over flere linjer */

print("Hei igjen. ");

print gjør det samme som echo, med noen små forskjeller, bl.a:
– print trenger parenteser.
– print returnerer alltid 1. Echo returnerer ingenting.

print("må ha parenteser.");
echo "kan " . "klare " . "seg " . "uten parenteser.";
echo "kan " , "også " , "skrive " , "multiple parametre.";

Tekstvariabler

Eksempel 1. Sette sammen (konkatenere) variabler.

<?php 

$x = "a";  // Variablene x og y, 
$y = "b";  // settes til henholdsvis bokstaven a og b.

// Konkatenering.
$t = $x . $y      // $x og $y settes sammen til $t.
	
$x .= $y          // Kortform for $x = $x . $y.  ($y føyes til $x.)
                  // ($x er lik $t.)
?>
Punktum brukes til å sette variabler og tekststrenger sammen.

Eksempel 2. Fnutter.

<?php 

$x="abc";   // Her er $x lik tekststrengen «abc».
echo "$x";  // Legg merke til forskjellen mellom dobbelfnutt og enkelfnutt.
echo '$x';  // Ved dobbelfnutt evalueres variabelen, mens med enkelfnutter ikke.

?>

Eksempel 2. Substring.

<?php 

$tekst = "abcdef";

$start = 1;
$lengde = strlen($tekst); // $lengde = 6.
$lengde = $lengde-1;  // $lengde = 5.

$tekst = substr($tekst,$start,$lengde);
echo $tekst;  // Her skrives ut en del av den opprinnelige teksten.

?>

Variabelen $tekst inneholder tekststrengen «abcdef».
Deler av den kan skrives ut vha. funksjonen substr().

Eksempel 3. Substring.

<?php 

$tekst = "abcdef";
$t1 = substr($tekst,0,1);
$t2 = substr($tekst,1,1);
$t3 = substr($tekst,2,1);
$t = $t1 .  $t2 .  $t3 ;   // $t blir abc.

?>

Matematikk

Eksempel 1. Regne eksempler.

<?php

// Addisjon. Summering. 
$a=0;        		   // Deklarerer en variabel $a og tilordner en startverdi.
$a = 1 + 2 + 3;            // Legger sammen 1, 2 og 3 og lagrer resultatet i variabelen a.

$a++;      		   // a økes med 1. (Kortform for a = a + 1;)
$a += 2;                   // Kortform for a = a + 2;

$b = 10 - 3;               // Subtraksjon.
$b--;      		   // b minkes med 1. (Kortform for b = b - 1;)
$b -= 2;		   // Kortform for b = b - 2;

$c = 2 * 3; 		   // Multiplikasjon.
$c *= 2;		   // Kortform for c = c * 2;

$d = 11 / 3; 	    	   // Divisjon.
$d /= 2;		   // Kortform for d = d / 2;

$e = 2 + 2/2 - 1;          // Divisjon, addisjon, og subtraksjon. 
$f = (2 + 2 ) / (2 - 1);   // Divisjon, addisjon, og subtraksjon med bruk av parenteser. 

$g = 11 % 3;      	   // Heltallsdivisjon.
                           // Modulus $g = 2 er rest etter heltallsdivisjon.
$h %= 2;		   // Kortform for $h = $h % 2;

$i = sqrt(9); 		   // $i = √9 = 3.0. 
                           // Merk at sqrt returnerer et flyttall.

$j = pi(); 	           // j = 3.1415926535898.  // pi-funksjonen gir tilnærmet π-verdi.
$k = M_PI; 	           // k = 3.1415926535898.  // Konstanten gir det samme som pi-funksjonen.

$l =2**4; 	           // Eksponent. $l er to opphøyd i fjerde, som er 16.

echo "$a $b $c $d $e $f $g $h $i $j $k $l";  

?>

Eksempel 2. Konstanter.

En konstant er en identifikator for en bestemt verdi.

<?php

// Konstanter defineres med define-funksjonen.
define("MAKS", 10); // Definerer en konstant som symboliserer en bestemt verdi.

echo "Maksverdien er: " . MAKS;

?>

define() tar tre parametre, hvorav den første er navnet, den andre verdien og den tredje angir om navnet skal være case-sensitiv.

Konstanter er globale og kan ikke endres under kjøring.

Konstanter har også type.

Det er en fordel å bruke store bokstaver for KONSTANTER, for å skille dem fra andre variable.


Variabel konvertering

PHP konverterer ofte automatisk fra en type til en annen når det er nødvendig.

Noen ganger vil man endre typen til en variabel. F.eks. gjøre om et heltall til et desimaltall eller en tekst.


Eksempel 1. Funksjoner som konverterer til heltall på litt ulike måter.

<?php

$x = (integer)$x;  // $x er nå av type heltall.
$x = (int)$x;      // $x er nå av type heltall.
$x = floor($x);    // Runder av nedover.
$x = round($x);    // Runder av på normalt vis.
$x = ceil($x);     // Runder av oppover.

?>

Eksempel 2. Funksjoner som konverterer til desimaltall.

<?php

$x = (float)$x;  // $x er nå av type desimaltall.
$x = (double)$x;  // $x er nå av type desimaltall.
$x = (real)$x;  // $x er nå av type desimaltall.

?>

Eksempel 3. Konvertering til tekst.

<?php

$x = (string)$x;  // $x er nå av type tekststreng.
$x = "$x";        // Å legge variabelen i dobbelfnutter konverterer også til tekst.

?>
<?php

// Her er to tekster som legges sammen.

$x = "1abc";  $y = "2def";
echo $x + $y;   // = 3.

// Dette kommer av at PHP omgjør variablene til tall før regneoperasjonen.
// I JavaScript ville dette blitt noe helt annet.

?>

Eksempel 4. Konvertering til matriser.

<?php

$x = (array)$x;  // $x er nå av type array.

?>

Eksempel 5. Konvertering til objekter.

<?php

$x = (object)$x;  // $x er nå et objekt.

?>

NULL er en spesiell type som bare har en verdi: NULL.


Funksjonen gettype($x) returnerer variabelens type.


Eksempel 6. Symbolet === sammenligner verdi og type.

<?php

x === y   // betyr at x er lik y og har samme datatype.

?>

Logikk

Boolske verdier kan ha to verdier; TRUE og FALSE.


Eksempel 1.

<?php
$a = 10;   // $a tilordnes verdien 10. ($a er lik 10.)

if ($a == 10) {echo '$a er lik 10 == TRUE.';}
if ($a == 11) {} else {echo '$a er lik 11 == FALSE.';}
if ($a === 10) {echo '$a er lik 10 og av samme type == TRUE.';}
if ($a != 10) {} else {echo '$a er ikke lik 10 == FALSE.';} 
if ($a !== 10) {} else {echo '$a er ikke lik 10 og av samme type == FALSE.';} 

if ($a < 10) {} else {echo '$a mindre enn 10 == FALSE.';}
if ($a > 10) {} else  {echo '$a større enn 10 == FALSE.';}

if ($a <= 10) {echo '$a mindre enn eller lik 10 == TRUE.';}

if ($a >= 10) {echo '$a større enn eller lik 10 == TRUE.';} 

$b = 11;  // $b tilordnes tallverdien 11. (b er lik 11.)
if ($a == 10 && $b == 11) {echo '$a er lik 10 OG b er lik 11 == TRUE.';}

if ($a == 9 || $b == 11) {echo '$a er lik 9 ELLER b er lik 11 == TRUE.';}

$a = "$a"; // $a inneholder teksten 10.
if ($a === 10) {} else {echo '$a er lik 10 og av samme type == FALSE.';} 


$x = TRUE;
if (!$x) {echo '$x er lik IKKE-$x == FALSE.';}   
else {echo '$x er lik IKKE-$x == TRUE.';}

?>

Eksempel 2. OG.

<?php

$x = FALSE;  $y = FALSE;  // $x og $y tildeles en boolsk verdi.

$b = $x && $y;  // $x OG $y. Begge er TRUE. (FALSE)

?>

Eksempel 3. ELLER.

<?php

$x = FALSE;  $y = FALSE;  // $x og $y tildeles en boolsk verdi.

$b = $x || $y; // $x ELLER $y. En av dem er TRUE. (FALSE)

// ELLER kan også lages med en if-setning.
$c = TRUE;
if (!$x) {$c = $y;}

?>

Eksempel 4.

<?php

$a = 1 < 2;                  // $a == TRUE.
$b = 2 > 3;                  // $b == FALSE.

$c = $a && $b; 	             // $c == $a OG $b == FALSE. 

$c = (1 < 2) && (2 < 3);     // $c = TRUE.

$a = !$b; 		     // $a == IKKE-$b == TRUE. 

$d = $a || $b; 		     // $d == $a ELLER $b. 

?>

Eksempel 5. FALSE kan være litt forskjellig.

<?php

if (FALSE == 0) {echo 'FALSE == 0';}
if (FALSE == "0") {echo 'FALSE == "0"';}
if (FALSE == "") {echo 'FALSE == ""';}
if ($a == FALSE) {echo 'Udefinert variabel == FALSE';}
if (TRUE != 0) {echo 'TRUE != 0';}
if (FALSE == NULL) {echo 'NULL == FALSE';}

?>

Eksempel 6. TRUE kan være mye rart.

<?php

if (TRUE == 1) {echo 'TRUE == 1';}  // Verdien er et tall, unntatt 0.
if (TRUE == 5) {echo 'TRUE == 5';}  // Verdien er et tall, unntatt 0.
if (TRUE == "abc") {echo 'TRUE == "abc"';}  // Verdien er en tekst, unntatt "" eller "0".
if (123 == "123abc") {echo '123 == "123abc"';} 
if ("5" == " 5") {echo '"5" == " 5"';} 
if ("3.1" == "3.10") {echo '"3.1" == "3.10"';} 
if ("133" == "0133") {echo '"133" == "0133"';}  // 0133 er oktalt.
if ("0x10" == "16") {echo '"0x10" == "16"';}    // Binære tall begynner med 0x.
if ("1e3" == "1000") {echo '"1e3" == "1000"';} 

?>

if

En tom if-setning kan se slik ut:  if () {}

Inne i (parentesen) er en betingelse (logisk uttrykk) og i { krøllparentesene } er php-kommandoer.

Eksempel:   if (true) {alert("True.")}   

Betingelse er et uttrykk som enten kan bli true eller false.
Det enkleste er sammenligning av variabler, (x == y). Det brukes to eller tre likhetstegn. Hvis en bruker bare ett likhetstegn er det en ugyldig sammenligning.
<?php
$a = 1;		// $a tilordnes verdien 1.
if ($a == 1) 
{echo 'Variabelen $a er lik en.';}
?>

If then else


Eksempel. Sammenligning av verdier.

<?php

$a = false;
if ($a == true) {$a = false;}
else {$a = true;}

echo ('Variabelen $a = ' . $a . ".");

?>

En variabel $a som settes til en boolsk verdi. Den testes i en if-setning, verdien byttes og variabelen skrives ut.


Eksempel. Sammenligning av type.

<?php

$a = 5; $b = 5.0;
if ($a === $b) {echo ("$a === $b er sant.");}
else {echo ("$a === $b er usant.");}

?>

Her er to variable. De testes i en if-setning om de er like og av samme type.

Den ene er et heltall og den andre et flyttall (desimaltall), og de er derfor ikke av samme type, og derfor ulike.


elseif

<?php

$a = 0;
if ($a == 1) {echo "a = 1.";} 
elseif ($a == 2) {echo "a = 2.";}
else if ($a == 3) {echo "a = 3.";}  // elseif kan også skrives i to ord.
else {echo "a er ikke 1,  2 eller 3.";}

?>

Kolon-notasjon

Kolon-notasjon er en alternativ syntaks, hvor krøllparentesene erstattes med kolon og endif.

<?php

$a = 0;
if ($a == 1): echo "a = 1."; 
elseif ($a == 2): echo "a = 2.";
else: echo "a er ikke 1 og ikke 2.";
endif;

?>

if innbakt i html-kode

If-setninger kan integreres med html.

<?php
$a = 1;
if ($a == 1){ ?>

// HTML-kode som skrives ut dersom betingelsen er oppfylt.
<p>$a = 1.</p> 

<?php }; ?>

Html-koden er innbakt i if-kommandoen.
HTML-koden skrives bare ut dersom betingelsen er oppfylt.


Kolon-syntaks kan gjøre ovenstående lettere å lese:

<?php
$a = 1;
if ($a == 1): ?>

// HTML-kode som skrives ut dersom betingelsen er oppfylt.
<p>$a = 1.</p> 

<?php endif; ?>

Vanligvis bør php og html-kode være mest mulig adskilt, men denne måten å gjøre det på kan være praktisk dersom det er mye html-kode og relativt lite php-kode.


PHP i CSS-kode:

<?php
$farge = blue;
?>

<p style="color:<?php $farge ?>">Fargen er blå.</p> 

// Som er det samme som: 
// <p style="color:blue;">Fargen er blå.</p> 


PHP og CSS-klasser:

<style> // To CSS-klasser:
.btekst {color:blue;}
.rtekst {color:red;}
</style>


<p class ="<?php $x = 1; print ($x == 1) ? 'btekst' : 'rtekst'; ?>">
Denne teksten er enten blå eller rød.</p> 

// Som er det samme som: 
// <p class ="btekst">Denne teksten er enten blå eller rød.</p> 


If-logikk:

<?php   // OG.

$a = 3;
if ($a > 1) && ($a < 10) {echo '$a er større enn 1 og mindre enn 10.';} 
else {echo '$a er mindre enn 1 eller større enn 10.';} 

?>
<?php  // OG kan også lages med en if-setning. Gjør det samme som over.

$a = 3;
if ($a > 1) 
{
    if ($a < 10) {echo '$a er større enn 1 og mindre enn 10.';} 
}
else {echo '$a er mindre enn 1 eller større enn 10.';} 

?>
<?php // OG som if-setning.

$x = FALSE;  $y = FALSE;  echo '$x og $y tildeles en boolsk verdi.';

$a = FALSE;
if ($x) {$a = $y;}
if ($a) {echo '$a == TRUE.';} else {echo '$a == FALSE.';} // Test.

?>
<?php   // ELLER.

$a = 3;
if ($a < 1) || ($a > 10) {echo '$a er mindre enn 1 eller større enn 10.';} 
else {echo '$a er mellom 1 og 10.';} 

?>
<?php     // ELLER kan også lages med en if-setning. Gjør det samme som over.

$a = 3;
if ($a < 1) {}
else if ($a > 10) {} 
else {echo '$a er mindre enn 1 eller større enn 10.';}

?>
<?php // Eller som if-setning.

$x = FALSE;  $y = FALSE;  echo '$x og $y tildeles en boolsk verdi.';

$b = FALSE;
if ($x) {$b = TRUE;} elseif ($y) {$b = TRUE;}
if ($b) {echo '$b == TRUE.';} else {echo '$b == FALSE.';} // Test.

?>

switch

Switch er en annen måte å sjekke betingelser på. f.eks. istedet for mange if elseif utsagn.

<?php

$a = 2;

switch ($a)
{
case 1: { $m = '$a == 1'; break;}
case 2: { $m = '$a == 2'; break; }
case 3: { $m = '$a == 3'; break; }
default: $m = '$a har ukjent verdi.';
}
echo $m;

?>

Switch-setningen tar en enkelt variabel som inndata og sjekker denne mot alle de andre verdiene.

break-kommandoen avslutter switch når den finner et treff. Det sparer litt tid.

default fanger opp de tilfeller hvor det ikke er treff.


Løkker

Løkker (loop) er nyttig når en trenger å utføre samme operasjon mange ganger etter hverandre.


For

For-løkker kan brukes når en på forhånd vet hvor mange ganger kommandoen skal utføres.

En tom for-løkke kan se slik ut:  for () {}

Inne i (parentesen) er en startverdi og sluttverdi for en variabel samt, en forøkelsesfaktor.
I {krøllparentesene} er php-kommandoer.

Eksempel 1:

<?php

for ($i = 1; $i <= 10; $i++) 
{
echo($i);
}

?>

Kommandoen begynner med nøkkelordet for.

Inne i parentesen får variabelen $i en startverdi = 1.

Deretter følger en betingelse som repeteres sålenge den er sann. I dette tilfelle at variabelen $i er mindre eller lik tallet ti.

For hver repetisjon økes variabelen i med 1.

Kommandoene utføres mellom {krøllparentesene}. I dette tilfelle skrives verdien av i ut.


While

En tom while-setning kan se slik ut:  while (betingelse) {kommandoer}

While-løkken repeteres så lenge betingelsen er sann.

Eksempel 1:

<?php

$i = 1;   // Variabelen $i tilordnes startverdien 1.

while($i <= 5)   // Betingelsen sjekkes.
    {
    echo 'Variabelen $i = ' . "$i 
"; $i++; //For hver repetisjon økes variabelen i med 1. } ?>

Eksempel 2: Samme program hvor verdiene skrives ut i en html-tabell.

<?php

echo "<table>";

$i = 1;   // $i tilordnes startverdien 1.

while($i <= 5) 
    {
echo "<tr><td>";

    echo 'Variabelen $i = ' . "$i <br>";
    $i++;
echo "<td><tr>";
    } 

echo "</table>";

?>

Do ... while

Do er en modifisert utgave av en while-loop.

En tom do-setning kan se slik ut:  do {kommandoer} while (betingelse);

Kommandoen begynner med nøkkelordet do fulgt av kommandoer og en while-betingelse.

Forskjellen fra while er at løkken blir kjørt minst en gang selv om betingelsen er usann. Det er fordi betingelsen blir sjekket etter at løkken kjøres første gang.

Eksempel 1:

<?php

$i = 1;   // $i tilordnes startverdien 1.

do
    {
    echo 'Variabelen $i = ' . "$i <br>";
    $i++; 
    } 
while ($i <= 0);

?>

Eksempel 2, med break.

<?php

$i = 1;
do
    {
    echo 'Variabelen $i = ' . "$i <br>";
    $i++; 
    Break;
    } 
while ($i <= 10);

echo "Løkken er stoppet og fortsetter med etterfølgende kode utenfor løkken.";

?>

Break stopper løkken og fortsetter med eventuell etterfølgende kode utenfor løkken.

Eksempel 3, med continue.

<?php

$i = 1;

do
    {

    $i++; 
    if ($i <= 6) {continue;}

    echo 'Variabelen $i = ' . "$i <br>";

    } 
while ($i <= 10);


?>

Kommandoen continue bryter en loop før den er fullført. Når variabelen $i har nådd en gitt verdi, fortsetter løkken på nytt, uten å utføre etterfølgende kommandoer.


Matriser (array)

En array er en spesiell variabel som kan inneholde flere verdier. Verdiene kan hentes fram ved å referere til en nøkkel-indeks.

En array kan sees på som en matrise eller tabell som består dataelementer. Hvert element har nøkkel (eller indeks) og tilhørende verdi. Elementene er indeksert fra 0 og oppover.

PHP-matriser kan ha ulik datatype.

Eksempel 1: Éndimensjonal matrise

<?php

$a[0] = "Her en liten tekststreng";
$a[1] = " Andre tekststreng";
$a[2] = " Tredje tekststreng. ";

echo $a[0] . $a[1] . $a[2];

?>

Denne matrisen kan sees på som en éndimensjonal tabell med et tre dataelementer som er indeksert fra 0 til 2.

For å referere til enkeltelementer brukes arraynavn og indeks. Arraynavnet kalles derfor også for en indeksert variabel.

Arrayvariabelen er en peker til arrayobjektet.


Eksempel 2: Array-funksjonen

array() er en funksjon som kan opprette en matrise.

<?php

$a = array ("a", " b", " c. ");

// Samme som over. Indekseringen er automatisk.

print_r($a);  // Array ( [0] => a [1] => b [2] => c. ) 

?>

Indeksene legges til automatisk, (og starter alltid på 0).


Eksempel 3: Innholdet i matrisen kan endres.

<?php

$a = array ("a", " b", " c. ");
$a = array (0 => "d", 1 => "e", 2 => "f" );

print_r($a);

?>

Her er innholdet abc endret til def.

print_r() er en funksjon som kan vise en variabel på leselig måte.
var_dump() gir mer info, bl.a. type og lengde.

Matriser kan sorteres, f.eks. med: sort($a).


Eksempel 4: Elementer kan tilføyes og fjernes.

<?php

$x = array ("a", "b", "c");
$x[] = "d";    
// Nøkkel er ikke spesifisert, 
// men på dette stedet i koden er det det samme som $x[3] = "d";
// Elementet legges til på slutten av en eksisterende matrise. 


$x[4] = "e";   // Legger til et nytt element med nøkkel "4".
unset($x[4]);  // Fjerner elementet.

// Fjerner alle elementer i matrisen.
foreach ($x as $i => $verdi) {unset($x[$i]);}

unset($x);    // Fjerner hele matrisen.

?>

foreach gjør det enkelt å traversere en matrise.


Eksempel 5: Tekstnøkler (assosiativ matrise).

<?php

$a['navn'] = "Nils";
$a['adresse'] = " Gågata 3,";
$a['sted'] = " Oslo. ";

echo $a[navn];
echo $a[adresse];
echo $a[sted];

?>

Nøklene må ha fnutter for ikke å forveksles med konstanter.


Eksempel 6: Kortnotasjon.

$a = array("navn" => "Nils ", "adresse" => "Gågata 3 ", "sted" => "Oslo.");

Assosiative matriser kan sorteres i forhold til verdier eller nøkler med asort() eller ksort().


Eksempel 6: Todimensjonal matrise

<?php

$brett = array (
"8" => array ("a", "b", "c", "d", "e", "f", "g", "h"),
"7" => array ("a", "b", "c", "d", "e", "f", "g", "h"),
"6" => array ("a", "b", "c", "d", "e", "f", "g", "h"),
"5" => array ("a", "b", "c", "d", "e", "f", "g", "h"),
"4" => array ("a", "b", "c", "d", "e", "f", "g", "h"),
"3" => array ("a", "b", "c", "d", "e", "f", "g", "h"),
"2" => array ("a", "b", "c", "d", "e", "f", "g", "h"),
"1" => array ("a", "b", "c", "d", "e", "f", "g", "h")
);

print_r($brett);

?>

Følgende kode skriver ut elementene av brettet i en tabell.

<?php

echo "<style>
table {
border:1px solid blue;
border-collapse:collapse;
}

td{border:1px solid blue;} 
</style>";

$antlinjer = count($brett);  // Lengden av en matrise.
$antrader = count($brett['1']);

echo "<p><b>Brett:</b></p>";

echo "<table>";
for ($linje = $antlinjer; $linje >= '1'; $linje--) 
{
echo "<tr><td>$linje</td>";
  for ($rad = 0; $rad < $antrader; $rad ++) 
  {echo "<td>" . $brett[$linje][$rad]."</td>";}
  echo "</tr>";
}
echo "</table>";

?>

foreach

foreach kan gå gjennom alle elementene i en matrise.

<?php // Skriver ut elementene i en matrise vha. en foreach.

$bokstavmatrise = array ("a", " b", " c", " d. ");

foreach ($bokstavmatrise as $bokstav) {echo $bokstav;}

?>
<?php // Skriver ut elementene i en matrise vha. en for-løkke.

$bokstavmatrise = array ("a", " b", " c", " d. ");
$antall = count($bokstavmatrise) - 1;
for ($i=0; $i <= $antall; $i++ ) {echo $bokstavmatrise[$i];}

?>
<?php

$bokstavmatrise = array ("a", " b", " c", " d. ");

$b = json_encode($bokstavmatrise);
echo $b;  // En annen måte å få ut alle elementene i en matrise.

?>
<?php

$bokstavmatrise = array ("a", " b", " c", " d. ");
var_dump($bokstavmatrise);  // Enda en måte å få ut alle elementene i en matrise.

?>
<?php // Skriver ut elementene med nøkkel og verdi.

$bokstavmatrise = array ("a", " b", " c", " d");
foreach ($bokstavmatrise as $indeks => $bokstav) 
{echo "$indeks er nøkkel for bokstaven $bokstav. <br>";}

?>

Skjema


Tekstskjema med POST

Her er et skjema for skriving av tekst:

Hva heter du:  

HTML-koden ser slik ut:


<form 
action="behandling-navn.php" method="POST">
Hva heter du: <input type="text" name="navn"> 
<input type="submit">
</form>

Når brukeren klikker Send sendes skjema til behandling til en PHP-fil som heter behandling-navn.php.

Koden ser slik ut:


Hei, du heter 

<?php 
$navn = ($_POST['navn']); 
echo ($navn . '.'); 
?>


Tekstskjema med GET

Her er et skjema for skriving av tekst:

Hva heter du:  

HTML-koden ser slik ut:


<form 
action="behandling-navn.php" method="GET">
Hva heter du: <input type="text" name="navn"> 
<input type="submit">
</form>

Filen som tar imot data fra skjemaet og behandler det heter behandling-navn.php og inneholder:


Hei, du heter 

<?php 
$navn = ($_GET['navn']); 
echo ($navn . '.'); 
?>

Forskjellen er at method="POST" er byttet ut med method="GET" i HTML-skjemaet.
I behandlingsfilen brukes variabelen $_GET for å hente verdien.

Med POST sendes informasjonen til behandlingsfilen usynlig.

Med GET overføres informasjonen via adresselinjen på vevsiden. URLen får et tillegg som begynner med et spørsmålstegn (?) som forteller nettleseren at det følgende er variabler.

Passord og sensitiv informasjon bør ikke sendes med GET.

Med GET kan det være mulig å bokmerke siden, som kan være nyttig i noen sammenhenger.

Som hovedregel bør POST brukes.

$_GET og $_POST er superglobale variable (assosiative matriser) i PHP som brukes til å samle data fra form-skjemaer.

Feltnavnene brukes som nøkler i den assosiative matrisen. Derfor må alle inndata-felter i HTML-skjemaet ha unike navn.

Det kan være en ide å kontrollere innputten bl.a. med tanke på sikkerhet. Bruk f.eks:
– htmlspecialchars() som konverterer eventuelle spesialtegn i html til korrekt html-koding.
Eks. < → &lt;    > → &gt;    " → &quot;    & → &amp;
– strip_tags() fjerner html- og php-tagger.
– stripslashes() fjerner \ (backslash).
– isset() avgjør om variabelen er satt og ikke NULL.
osv.

Tallskjema med POST

Her er et skjema for skriving av tall:

Hvor gammel er du:  

HTML-koden ser slik ut:


<form 
action="behandling-alder.php" 
method="POST">
Hvor gammel er du: <input type="text" name="alder">
<input type="submit">
</form>

Filen som behandler skjemaet heter behandling-alder.php og inneholder:


Du er 

<?php 
echo (int)$_POST['alder'] . " år"; 

?>

Siden alder er et heltall, kan innputten konverteres til heltall.
int-funksjonen konverterer innholdet til et heltall og fjerner andre tegn.


Filbehandling


Inkluder fil

Med kommandoen include kan en hvilken som helst fil inkluderes.

<?php
include("filnavn.txt");
?>

Filen med tekst og markup-koder, kopieres inn i dokumentet.

Inkludering er nyttig når en ønsker å ha samme tekst på flere vev-sider. F.eks. standard topp, bunn, marg, meny, osv.


Les fil med readfile

Kommandoen readfile er nyttig hvis en vil åpne en fil og vise innholdet.

<?php

readfile("filnavn.txt");

?>

Funksjonen returnerer antall tegn dersom lesingen av filen lykkes. Hvis den mislykkes returneres FALSE eller en feilmelding.

<?php

$f = readfile("filnavn.txt");

echo "<br>Antall tegn er: " . $f . ".";

?>

Les fil med fread og fopen

Ved å bruke fread-funksjonen har en flere muligheter.

Eksempel 1.

<?php

$f = fopen("filnavn.txt", "r");
// Første parameter er navnet til filen som skal åpnes.
// Andre parameter (r) angir at filen skal åpnes i lese-modus.
// $f inneholder en referanse til filen.

$f = fread($f,100);
// Innholdet i filen leses til variabelen $f.
// Første parameter er en filreferanse.
// Andre parameter angir maksimalt antall tegn som skal leses.

echo $f;  // Viser innholdet i filen.

fclose($f);  // Filen lukkes.

?>

Eksempel 2.

<?php

$fnvn = "filnavn.txt";

$f = fopen($fnvn, "r") or die("Kan ikke åpne filen!");
// Her lages en feilmelding dersom filen ikke kan åpnes.
// Variabelen $fnvn inneholder navnet på filen.

$f = fread($f,filesize($fnvn));
// Her leses hele filen, ved at filesize angir filstørrelsen.

echo $f;

fclose($f); 

// Når filen er lukket kan det ikke leses eller skrives til filen.
// Selv om filen trolig lukkes av tjeneren når programmet er avsluttet
// er det god praksis å lukke filer som en er ferdige med.

?>

Ny fil

En ny fil lages ved å åpne den med w-parameteren.

<?php

$fnvn = "nyfil.txt";   // Filnavnet lagres i en variabel.
$fref = fopen($fnvn, "w") or die("Kan ikke åpne filen!");

// Variabelen $fref får en referanse til filen.
// Første parameter er filnavnet.
// Andre parameter (w) angir at filen skal åpnes i skrive-modus,
// og at alt innholdet i filen blir slettet.
// Hvis filen ikke finnes, opprettes en ny fil.

fclose($fref); 
echo "Sjekk filen.";

?>

Skriv til fil med fwrite (Overskriving)

Eksempel 1. Eksisterende data overskrives og slettes.

<?php


$fnvn = "filnavn.txt";
$fdta = "Innholdet i filen.\n"; // med ny linje (\n).

$fref = fopen($fnvn, "w") or die("Kan ikke åpne filen!");

// w-parameteren angir skrive-modus.
// Filpekeren starter ved begynnelsen.

fwrite($fref,$fdta);

// Her skrives data til filen hvor,
// første parameter ($fref) inneholder en filreferanse,
// og andre parameter er innholdet.


$fdta = "Nytt innhold.";
fwrite($fref,$fdta); // Her skrives nytt innhold til filen.

fclose($fref); 
echo ("Sjekk filen $fnvn.");

?>

Eksempel 2. Slett innholdet i en fil

<?php


$fnvn = "filnavn.txt";
$fdta = ""; 

$fref = fopen($fnvn, "w") or die("Kan ikke åpne filen!");
// Innholdet i filen slettes.

# fwrite($fref,$fdta); // Det er ikke nødvendig å skrive til filen.

fclose($fref); 
echo ("Sjekk filen $fnvn.");

?>

Å slette innholdet i filer kan være nyttig for midlertidige filer og buffre og lignende.


Legg til innhold i en fil

For å tilføye innhold i en fil, uten å slette eksisterende innhold, brukes a-parameteren ved åpning.

Eksempel.

<?php


$fnvn = "filnavn.txt";
$fdta = "\nTilføyd innhold. "; // Med linjeskift foran.

$fref = fopen($fnvn, "a") or die("Kan ikke åpne filen!");

// a-parameteren åpner filen i append-modus.
// Eksisterende data beholdes.
// Filpekeren starter ved slutten.
// Hvis filen ikke finnes lages en ny.

fwrite($fref,$fdta);

// Her tilføyes data til filen hvor,
// første parameter ($fref) inneholder en filreferanse,
// og andre parameter er innholdet.

fclose($fref); 
echo ("Sjekk filen $fnvn.");

?>

Slett fil

Eksempel 1.

<?php

unlink("filnavn.txt");  // Sletter filen dersom den finnes.

echo ("Sjekk filen: filnavn.txt.");

?>

Eksempel 2.

<?php

$fnvn = "filnavn.txt";

if(file_exists($fnvn))
{
unlink($fnvn);  // Sletter filen dersom den finnes.
echo ("Filen $fnvn ble slettet.");
}
else
{
echo ("Filen $fnvn fantes ikke, og ble derfor ikke slettet.");
}

?>

Filopplastning

Lag først et HTML skjema som gjør at brukeren kan velge en fil på sin egen maskin og laste den opp til et midlertidig sted på tjener-maskinen:

Velg fil som skal lastes opp:

HTML-koden ser slik ut:


<form
method="POST"
action="filopplastning.php" 
enctype= "multipart/form-data"
>

<!-- Spesifiserer hvordan filen skal kodes ved overføring til tjener. 
enctype= "multipart/form-data" må brukes når 
skjemaer inneholder <input type="file"> elementer.
-->


<input type="hidden" name="MAX_FILE_SIZE" value="20000">
<!--
Dette er et skjult felt som angir maksimal filstørrelse i antall byte.
20000 byte = 20kB. Passende størrelse kan 
f.eks. være 1MB for bilder og 10MB for video.
Direktivet må komme før input-feltet.
Verdien av MAX_FILE_SIZE sendes til max_file_size variabelen i PHP.
Hensikten er å stoppe store filer før de lastes opp.
Det handler om brukervennlighet 
og ikke om sikkerhet fordi det er lett å omgå denne sperren.
Direktivet kan godt utelates fordi den virkelige sjekken
må skje i PHP-koden eller i PHP.ini.
-->

Velg fil som skal lastes opp:<br>
<input 
name="filref"
type="file"
>
<!-- filref er referansen til filen. 
Navnet filref går til filnavnet i variabelen $_FILES['filref']['name'].
-->



<input 
type="submit"
value ="Last opp fil." 
>

<!-- 
Når brukeren trykker på knappen lastes filen opp til et midlertidig lager. 
Referansen lagres den globale variabelen $_FILES. 
-->

<!-- Deretter blir skjemaet sendt til filen spesifisert i action 
som i dette tilfelle er filopplastning.php. -->

</form>

Opprett en fil med et PHP skript for opplasting.
Filen kan f.eks. hete filopplastning.php og koden kan se slik ut:

<?php 

$opplastingsmappe = "opplastingsmappe/"; 
// Opplastingsmappen som filen lastes til, 
// blir satt til samme mappe som skriptet ligger i.

$filnavn = basename($_FILES['filref']['name']);
// Variabelen $filnavn får det opprinnelige filnavnet.
// $_FILES er en superglobal matrise hvor PHP lagrer fil-informasjon. 
// filref er referansen som ble tildelt i HTML-skjemaet. 
// $_FILES['filref']['name'] er det opprinnelige filnavnet på brukerens fil.

$opplastingsmappe = $opplastingsmappe . $filnavn;
// Filen skal lastes til opplastingsmappen.

$tmpfil = $_FILES['filref']['tmp_name'];
// Variabelen $tmpfil får navnet til den midlertidige filen som ligger på tjeneren.

$opplasting = move_uploaded_file($tmpfil, $opplastingsmappe);
// Filen flyttes fra midlertidig mappe til målmappen.

// Tilbakemelding.
if ($opplasting) {echo "Filen $filnavn ble lastet opp.";}
else {echo "Feil med opplasting!";}

?>

Hvis dette ikke virker kan det skyldes at opplastingsmappen har feil rettigheter.

Eller at «php.ini» ikke er konfigurert for filopplasting; sjekk direktivet file_uploads = On.


Opplasting med validering

Før filen flyttes til opplastingsmappen bør den testes.

<?php 

$opplasting = true;  // Avgjør om det skal skje en opplasting.
$feilmelding = "Feilmelding:<br>";

// Sjekker feilkode fra html-skjemaet.
$feilkode = $_FILES['filref']['error']; 
if ($feilkode == 0) {} // Filen er ok ihht. html-skjema.
else if ($feilkode == 1)
{
$feilmelding = $feilmelding . 
"Filen er for stor ihht. php.ini. (Feilkode $feilkode.)<br>";
$opplasting = false;
}
else if ($feilkode == 2)
{
$feilmelding = $feilmelding . 
"Filen er for stor ihht. html-skjema. (Feilkode $feilkode.)<br>";
$opplasting = false;
}
else {
$feilmelding = $feilmelding . 
"Feil med filen. (Feilkode $feilkode.) <br>";
$opplasting = false;
}

$opplastingsmappe = "opplastingsmappe/"; 
$filnavn = basename($_FILES['filref']['name']);
$opplastingsmappe = $opplastingsmappe . $filnavn;
$tmpfil = $_FILES['filref']['tmp_name'];

// Sjekk filendelse.
$filendelse = pathinfo($opplastingsmappe,PATHINFO_EXTENSION);
if($filendelse != "jpg" && $filendelse != "png") 
{
$feilmelding = $feilmelding . 
"Kun filer med filendelse .jpg eller .png er tillatt.<br>";
$opplasting = false;
}

// Sjekk filtypen.
$filtype = $_FILES['filref']['type'];  // Mimetypen.
//echo $filtype;

if (strstr($filtype, "jpeg")) {} // Godtar jpeg-filer.
else {if (strstr($filtype, "png")) {} // Godtar png-filer.
else 
{
$feilmelding = $feilmelding . 
"Kun png og jpeg filer er tillatt.<br>";
$opplasting = false;
}}

// Sjekk om filen allerede finnes i opplastingsmappen.
if (file_exists($opplastingsmappe)) 
{
$feilmelding = $feilmelding . "Filen finnes allerede.<br>";
$opplasting = false;
}

// Sjekk om filen er for stor.
$str = $_FILES['filref']['size'];
$maks = 250000;
if ($str > $maks) 
{
$feilmelding = $feilmelding . 
"Filen er for stor. Størrelsen er $str, (maks er $maks).<br>";
$opplasting = false;
}
else if ($str = 0) 
{
$feilmelding = $feilmelding . 
"Ingen fil ble valgt.<br>";
$opplasting = false;
}

if ($opplasting) 
{
$opplasting = move_uploaded_file($tmpfil, $opplastingsmappe);
// Funksjonen move_uploaded_file returnerer true, 
// hvis filen ble flyttet, og false om det var problemer.
}
else {$feilmelding = $feilmelding . 
"Filen $filnavn ble ikke lastet opp.<br>";}

// Tilbakemelding.
if ($opplasting) 
{echo "Filen $filnavn ble lastet opp.";}
else {
echo $feilmelding;
}

// Filen blir automatisk slettet fra det midlertidige lageret.

?>

Sikkerhet

Det er viktig å sjekke input fra brukeren slik som vist over, for å begrense størrelse, filtype, duplikater, osv.

Opplastingmappen bør ikke ligge på samme sted som PHP-skriptet. Flytt det utenfor vev-roten. Dermed er det vanskeligere for andre å se hva som er i mappen.

En kan også legge inn en tom index.html.

Filer med samme navn kan være et problem, fordi den siste vil slette foregående. For å forhindre dette kan filnavnet modifiseres f.eks. ved å gi det et tillegg når det flyttes til opplastingsmappen.

$filnavn = md5(rand() * time()) . $filnavn;

md5() genererer en 32 tegns tilfeldig tekststreng.


Nedlasting

Skript som lister alle filene i en mappe og lager en liste med klikkbare lenker.

<?php 

$opplastingsmappe = 'opplastingsmappe/';
$filliste = scandir($opplastingsmappe, 0);
$antallfiler = sizeof($files); 

print "<ul>\n";
for($i=0; $i < $antallfiler; $i++ )
{
   $filnavn = $filliste[$i];
   if($filnavn == '.') {continue;}
   if($filnavn == '..') {continue;}
   print '<li><a href="' . $opplastingsmappe . $filnavn . '">' . $filnavn . '</a></
   li>' . "\n";
}
print "</ul>\n";

?>

Dato

date() er en innebygd funksjon i PHP som gir dagens dato.
Ved å angi parametere kan en få ut dagnummer, månedsnummer, årstall, osv.

<?php 

date_default_timezone_set('CET'); //Central European Time.
$dag = date("d"); // Dagnummer.
$mnd = date("m"); // Månedsnummer.
$aar = date("Y"); // Årstallet.
$dto = "$dag.$mnd.$aar.";
echo "Dagens dato er: $dto";

?>

Når "d.m.Y" står inne i parentesen blir resultatet dagens dato på formen dag.måned.år.

<?php 

echo "Dagens dato er: " . date("d.m.Y");

?>

Funksjoner

Funksjoner gjør det lettere å modulere koden i mindre oppgaver.

Funksjoner starter med kodeordet function.

Deretter følger navnet på funksjonen.


Eksempel:

<?php

function funksjonsnavn1()
   {
   echo "Hei, her er kode fra funksjonen.";
   }

funksjonsnavn1();    //Funksjonskall.

?>

Funksjonen inneholder php-kommandoer inne i { krøllparentesene }. Den siste krøllparentesen avslutter funksjonen.

Funksjoner aktiveres med et funksjonskall.


Funksjoner kan ha parametre.

Funksjoner har ofte parametre inne i parentesen.
Er det ingen parametre er parentesen tom.

<?php // Funksjoner kan ha parametre.

function funksjonsnavn2($p1,$p2,$p3)
{
   echo "$p1 $p2 $p3";
}


$p1 = "Hei, ";
$p2 = "her er kode fra funksjonen,";
$p3 = "med tre parametre.";

funksjonsnavn2($p1,$p2,$p3);

?>

Funksjoner kan bruke globale variable.

<?php // Funksjoner kan bruke globale variable.

function funksjonsnavn3()
{
global $p1; global $p2; global $p3;
echo "$p1 $p2 $p3";
}


$p1 = "Hei, ";
$p2 = "her er kode fra funksjonen,";
$p3 = "med globale parametre.";

funksjonsnavn3();  // Ingen parametre.

?>

Her er $p1, $p2 og $p3 globale variable, som også blir kjent på innsiden av funksjonen.


Funksjoner kan bruke globale variable direkte.

PHP lagrer alle globale i en matrise som heter $GLOBALS['globalens navn'].

<?php // Funksjoner kan også bruke globale variable direkte.

function visGlobal() 
{ 
echo $GLOBALS['z'];   // $z er tilgjengelig innenfor funksjonen.
}

$z = 1;  // $z settes til 1 utenfor funksjonen.
visGlobal();  // Funksjonskall.

?>

Matrisen $GLOBALS[] er tilgjengelig innenfra funksjoner.


Statiske variable i funksjoner.

<?php // Funksjoner kan ha statiske variable.

function visStatiskVariabel() 
{ 
static $x = 0;
$x++;
echo $x;
}


// Funksjonskall. Variabelen beholder verdien fra forrige kall.
visStatiskVariabel();  // $x == 1.
visStatiskVariabel();  // $x == 2.
visStatiskVariabel();  // $x == 3.

?>

Normalt slettes alle variablene når funksjonen avsluttes. Noen ganger trenger en å beholde variabelen mellom funksjonskall.


<?php  // Funksjoner kan ha en returverdi.

function summer($x,$y)
{
   $sum = $x + $y;
   return $sum;
}

echo "Summen av 1 + 2 = " . summer(1,2);

?>

Funksjoner kan ha referanse-parametre.

<?php  // Funksjoner kan ha referanse-parametre.

function inkrementer(&$x) // Bruker & foran parameteren.
{$x = $x + 1;}

$x = 1;
echo '$x' . " er: $x";  // $x er 1;
inkrementer($x);
echo '$x' . " er: $x";  // $x er 2;

?>

Det brukes en & foran parameteren.


Funksjoner med mange parametre.

<?php  // Funksjoner med mange parametre.

function funksjonsnavn4() {
// En innebygd funksjon returnerer alle parametrene i en matrise.
$parametre = func_get_args(); 
foreach ($parametre as $p) {echo $p;}
}

$p1 = "Hei, ";
$p2 = "her er kode fra funksjonen, ";
$p3 = "med flere parametre. ";

funksjonsnavn4($p1,$p2,$p3);

?>

Objekter

Objekter er datatyper som kan inneholde data i form av variable og funksjoner.

Objekter defineres med klasse-navn.

<?php

class person1
{
var $navn;  // Objekter kan ha attributter.
var $alder;
}

$p = new person1;  // Lager en instans av klassen.
$p->navn = "Nils.";
print "Navn: " . $p->navn;

?>

 

<?php  // Objekter kan inneholde funksjoner.

class person2
{
var $navn = "NN.";

function settNavn($n){$this->navn = $n;}  // Funksjon som setter navnet.

function hentNavn(){return $this->navn;} // Funksjon som henter navnet.
}

$q = new person2;

$q->settNavn("Martin");

echo "Navn: " . $q->hentNavn();

?>

 

<?php  // Objekter kan ha skjulte egenskaper.

class person3
{
private $navn = "NN.";   // Attributtet kan ikke nåes utenfra.

public function settNavn($n){$this->navn = $n;}

public function hentNavn(){return $this->navn;}
}

$r = new person3;

$r->settNavn("Martin");

echo "Navn: " . $r->hentNavn();

?>

Fordelen med den siste metoden er at funksjonene sett og hent antas å være fast over den tiden objektet vedlikeholdes. Innholdet i objektet, navn på variabler, funksjoner osv. kan endres uten at konteksten trenger å endres.


Feilmeldinger

Feilmeldinger kan skrives ut.

<?php 

error_reporting(E_ALL);  // Viser alle feil.

// PHP-kode.

?>

PHP versus JavaScript

Forskjeller:
– PHP er et tjenersidespråk, laget for å generere HTML-kode. Krever en vevtjener for å fungere.
– Javascript er et klientsidespråk, og krever bare en nettleser for å fungere.
– JavaScript har mange begrensninger. Kan ikke lese eller skrive til filer, osv.
– JavaScript er derfor sikrere enn PHP.
– Javascript kan være vanskelig å teste og vedlikeholde.
– JS mangler et klart klasse-begrep, som gjør at det ikke egner seg til OO-opplæring.
– PHP lager dynamiske vev-sider.
– Javascript avhenger av nettleseren. Forutsetter at JS ikke er deaktivert. Ulike nettlesere har ulik støtte for JS og kan behandle JS-kode ulikt.
– PHP er uavhengig av nettleseren.
– PHP er usynlig for brukeren, fordi resultatet av PHP er HTML.
– PHP er skrevet med åpen kildekode. Dvs. at hele kildekoden er tilgjengelig.
Likheter:
– Begge er interpreterende skriptspråk, som ikke trenger kompilering.
– Syntaksen er helt lik i mange kommandoer. F.eks. if () {}.
– Begge er plattformuavhengig.
– Begge er OO-programmeringsspråk.

Historikk

1994. PHP-prosjektet startet av dansk-kanadieren Rasmus Lerdorf.
Han var programvareutvikler og medlem av utviklingsteamet til Apache og ville holde oversikt over besøkende på sin personlige vevside.
Til dette utviklet han en skriptsamling basert på Perl og CGI, som enkelt kunne installeres på personlige nettsider.

08.06.1995. Første versjon av Personal Home Page (PHP) kom i 1995.
PHP ble offentlig tilgjengelig og gjort til åpen kildekode.

PHP ble utviklet for ikke-programmere for å kode ikke-programmer (vev-sider) uten for bratt læringskurve, og ikke stopper opp selv om det er mindre feil.
Svak typing og automatisk konvertering mellom datatyper.
De første versjonene var inspirert av Perl og C.

1995. PHP versjon 2, kalt PHP/FI. Denne inkluderte Form Interpreter, som muliggjorde kommunikasjon mot SQL-databaser.

I midten av 1997. 50 tusen nettsteder brukte PHP.

Juni 1998. PHP 3 (PHP/FI 2) ble skrevet om fra bunnen av. Akronymet ble endret til «PHP: Hypertext Preprocessor». Raskere.

PHP opparbeidet seg etter hvert en stor brukerbase, og ble snart ansett som en standard installasjon på flere vevtjenerne på Internett.

Oktober 1998. 100 tusen nettsteder brukte PHP.

Oktober 1999. 1 million nettsteder brukte PHP.

Mai 2000. PHP 4, med Zend Engine ble lansert.

13.07.2004. PHP versjon 5. OO med inspirasjon fra C++ og Java. SimpleXML for enklere manipulering av XML.

2005. AJAX (Asynchronous JavaScript And XML) ble introdusert.

07.08.2008. PHP 4.4.9 markerte livssyklusslutt for PHP4.

PHP 5.1. Nytt grensesnitt for generisk kommunikasjon med databaser for å enklere støtte til forskjellige databasesystemer.

PHP 5.2. Bedre minnehåndtering forbedret ytelse og ressursbruk.

August 2014. PHP 5.6.

2016. PHP7. Bedre ytelse. Redusert minnebruk.


Litteratur

phpbok.no


Lenker

php.net

php.net Den offisielle PHP-manualen.

 

 

 

 

 

© 2016. Nils Martin Aslaksen.    validator.w3.org    jigsaw.w3.org     validator.w3.org