<< Tilbage

OOP i PHP

Rent kodemæssigt er der intet hokuspokus i at arbejde med OOP i PHP, da der kun er nogle få elementer man skal have styr på. Den svære del består i at forstå sammenhængen og meningen, specielt hvis man ikke har arbejdet med andre sprog der benytter det. Har du beskæftiget dig med de lidt mere omfattende projekter, så har du sansynligivs også fundet ud af, at din kode hurtigt kan udvikle sig til noget rod, uden struktur og uden overblik. Det er altsammen noget OOP skal afhjælpe, samtidig med at du lettere vil kunne foretage ændringer og genbruge dele af koden.

Klasser og objekter

OOP bygger på klasser, rent kodemæsssigt er en klasse intet mere end en samling af variabler og funktioner. Men de hører naturligt sammen, og er ikke bare en stor samling af tilfældige variabler og funktioner, som man kan benytte af. Betragt en klasse som en kodemæssig beskrivelse af en ting, en slags, en type. Vi kunne f.eks. lave en bil-klasse. I denne bil-klasse kan vi oprette nogle variabler der er tilknyttet en bil - fx mærke, model, farve og max. hastighed. Derudver skal bil-klassen også kunne udføre nogle opgaver - fx bremse, accelerere, blinke og skifte gear. Bevæger vi os over i web-verdenen, så kunne vi fx lave en brugerprofil-klasse (med oplysninger om navn, email, status, og funktioner som slet, opret, ændre status). I sådan et tilfælde har vi kun én klasse, alle brugere er baseret på denne klasse, fordi de alle er brugere.

Kig dig omkring, din verden er fyldt med objekter. Min hund Fido er et objekt, baseret på en overordnet klasse der hedder 'hund'. I denne klasse er egenskaberne (alder, race..) og metoderne (gø, dække, æde..) for hunde beskrevet. Naboens hund er ligeledes et objekt baseret på klassen 'hund' - eller en instans af klassen hund som man kalder det.

Første klasse

På nuværende tidspunkter forventer jeg ikke at du forstår konceptet fuldt ud, da det samtidig også kræver en portion erfaring i praksis for at forstå (iøvrigt findes der flere bøger om emnet).

Men lad os komme igang med at lave den første klasse... i eksemplet herunder opretter vi en, indtil videre, tom klasse kaldet 'Bruger':

Kode:
1.
2.
3.
4.
5.
6.
<?php
class Bruger
{
    
//Jeg befinder mig i klassen Bruger
}
?>

Vi starter altså med at skrive class efterfulgt af navnet på klassen. Det er en detalje, men man skriver normalt klassens navn med stort begyndelsesbogstav. Imellem de to turborgklammer { } programmere vi selve klassens indhold.

Lad os prøve at tilføje nogle variabler (eller egenskaber) til vores klasse:

Kode:
1.
2.
3.
4.
5.
6.
7.
8.
<?php
class Bruger
{
    var 
$navn;
    var 
$email;
    var 
$karma "Neutral";
}
?>

I en klasse opretter man variabler ved at skrive var efterfulgt af variablen. De første to variabler vi opretter i linje 4 og 5 har endnu ikke fået tildelt nogen værdi (modsat den sidste variabel som standard bliver tildelt 'Neutral').

Lad os udvide klassen ved at tilføje en funktion:

Kode:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?php
class Bruger
{
    var 
$navn;
    var 
$email;
    var 
$karma "Neutral";

    function 
get_email()
    {
        return 
$this->email;
    }
}
?>

I linje 8 opretter vi en meget simpel funktion kaldet get_email, på samme måde vi normalt gør. Den har til formål at returnere klassevariablen 'email'. Det vigtige at bemærke her, er brugen af $this-> som fortæller at det er en variabel fra klassen. Jeg kunne f.eks. have tildelt 'karma' en ny værdi ved at skrive: $this->karma = "Nyværdi";. Havde vi kun skrevet $email ville programmet ikke forstå hvilken variabel der er tale om.

Oprette objekter

Kode:
1.
2.
3.
4.
5.
6.
<?php
$webmaster 
= new Bruger(); //$webmaster er nu et objekt

$webmaster->email "webmaster@phpartikler.dk";
echo 
$webmaster->get_email();
?>

I linje 2 opretter vi et objekt ($webmaster) ved at skrive new efterfulgt af navnet på klassen. Objektet har nu adgang til alle de egenskaber og funktioner der er defineret i klassen Bruger.

Constructors

En constructor er en funktion der bliver kaldet, lige så snart et nyt objekt oprettes. Constructorfunktionen skal have samme navn som klassen selv, eksempel:

Kode:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?php
class Bruger
{
    var 
$navn;
    var 
$email;
    var 
$karma "Neutral";
    
    function 
Bruger($id)
    {
        echo 
"Brugerens id er $id, hent evt. informationer fra min database og
        definer egenskaberne (variablerne) i denne klasse"
;
    }
}

$webmaster = new Bruger(100);
?>
Resultat:
Brugerens id er 100, hent evt. informationer fra min database og definer egenskaberne (variablerne) i denne klasse


Mere læsning

Det har været kort introduktion, men der er i virkeligheden mange flere aspeker i emnet. Så gå gerne på opdagelse i disse links:

Object-Oriented Programming Concepts
Generel introduktion til begrebet. God læsning.

PHP Manualen: classes and objects
Yderligere beskrivelse af det rent praktiske i oop i PHP.

Devarticles: object oriented programming in php
Endnu et detaljeret introduktion til oop i PHP, en del gode eksempler.

Leder du efter billige usb stik?, så kan du få et Billigt USB stik hos usb.dk

Spørgsmål/forslag/kommentarer rettes til webmaster@phpartikler.dk

Billige USB stik