Brugernavn:




Kodeord: Husk
Forside Forum Artikler Downloads Søg
 

Omkring klasser i PHP


For ord
Hej. Jeg vil i dag fortælle om klasser. Som i nok ved, er klasser en del af programmeringsmåden OOP. OOP er en ny ”trend”, indenfor programmering. De fleste programmører har efterhånden vendt sig til måden. Og ja, jeg bruger det også selv.
Obs.: Klasser er ikke OOP, kun en del af det.

Her er et par punkter for, hvorfor du skal benytte OOP:
- Det gør det lettere for dig at holde styr på data, ændre og slette ting i din klasse.
- Det er let at udbygge sit script, ikke skrive det om, bare udbygge.

Du kan herunder se hvilke punkter jeg vil gennemgå i denne artikel.
1. Klassens opbygning
1.1 Nøgleordene extends, final og parent
2. Variabler i klassen
2.1 De tre gyldne p’er
3. Funktioner i klassen
3.1 Nøgleordet final
4. Konstruktøren/Destruktøren
5. Parent, self
6. Et færdigt script
7. Slutning

Obs. Eventuelle stavefejl skal du ikke tage dig af..

1. Klassens opbygning
For at starte en klasse, bruger vi nøgleordet class, efterfulgt at navnet på vores klasse.
Her er et eksempel:
  1. <?php
  2. class VoresKlasse {
  3. # Jeg befinder mig i VoresKlasse
  4. }
  5. ?> 
Som du ser, startes en klasse med nøgleordet class, efterfulgt af navnet. Og efter navnet en tuborgklamme ({). Klassen ”lukkes” også med en tuborgklamme (}).
I det næste eksempel, vil jeg vise hvordan klassen egentlig er opbygget.
  1. <?php
  2. class VoresKlasse {
  3. # Her sættes variablerne, som skal bruges i klassen (mere senere)

  4. # Evt. konstruktøren her

  5. // Funktioner til klassen

  6. # Evt. destruktøren her

  7. }
  8. ?> 
Det er sådan en klasse er opbygget, men du forstår nok ikke meningen med det jeg skrev. Men det kommer, jo længere henne i artiklen du kommer. Klasser er ret gode at arbejde med, jeg nyder når jeg arbejder med klasser. Men nok om mig, lad os gå videre.

1.1 Nøgleordene extends, final og parent
I dette afsnit, vil jeg prøve at forklare dig hvad nøgleordene extends og final gør.

Extends
Extends er det nøgleord du skal bruge, hvis du vil nedarve fra en anden klasse.
Eksempel:
  1. <?php
  2. class EnKlasse {

  3. public function funktion() {
  4. print ”Hej jeg er en funktion”;
  5. }

  6. class EnAndenKlasse extends EnKlasse {

  7. public function __construct() {
  8. parent::function();
  9. }

  10. }
  11. ?> 
Selvom du nok ikke forstår hele koden, håber jeg da du forstår hvad extends gør.
Når vi bruger extends, kan vi benytte variabler og funktioner fra den klasse vi nedarver fra.
Dette kan gøre ved at enten bruger nøgleordet parent (mere senere) eller navnet på klassen, efterfulgt af to semikoloner ( :: ) også navnet på funktionen/variablen.

Final
Final har den funktion at gøre så klassen/funktionen/variablen ikke kan overskrives.
Eksempel:
  1. <?php
  2. final class EnKlasse {
  3. # Indhold i klassen
  4. }

  5. class EnKlasse { // Vil give fejl, da class EnKlasse er defineret final.
  6. # Indhold i klassen
  7. }
  8. ?> 
Så hvis vi definerer en klasse/funktion/variabel med nøgleordet final, kan den ikke overskrives.
- Normalt ville php bare overskrive klassen/funktionen/variablen.

2. Variabler i klassen
I en klasse, kan man definere hvilke variabler der kan benyttes i klassen.
Eksempel:
  1. <?php
  2. class EnKlasse {
  3. var $variabel;
  4. }
  5. ?>
Her har vi så defineret at vi frit kan benytte $variabel i klassen.
Men..

2.1 De tre gyldne p’er
De tre gyldne p’er:
Public
Protected
Private

- Public:
Alle kan tilgå variablen/funktionen.
Som standard i PHP, er alle ting public.
Men hvis du bare har skrevet:
  1. <?php
  2. class EnKlass {
  3. # Variabler
  4. function funktion() {
  5. # Indhold
  6. }
  7. }
  8. ?>
Så skriv public foran. Mest for din egen skyld, så får du et bedre overblik over funktioner i din klasse. Hvilke der er public, protected eller private.

- Protected:
Klassen som variablen/funktionen er deklareret i, og klasser som nedarver fra den klasse, kan benytte variablen/funktionen.

- Private:
Kun klassen som variablen/funktionen er deklareret i, kan benytte variablen/funktionen.
Info: Det er en god ting at bruge private, i funktioner/variabler, som du bruger i konstruktøren

3. Funktioner i klassen
Som du nok ved, består en klasse af mange funktioner.
Jeg vil ikke komme så meget ind på det, da du højst sandsynligvis ved hvad funktioner er.
Men også her, findes de 3 gyldne p’er.
  1. <?php
  2. class EnKlasse {
  3. # Variabler

  4. public function minFuntion() {
  5. print “Jeg er en funktion”;
  6. }
  7. ?>
Og når du så vil udskrive minFunktion().
  1. <?php
  2. class EnKlasse {
  3. # Variabler

  4. public function minFuntion() {
  5. print “Jeg er en funktion”;
  6. }
  7. $klassen = New EnKlass;
  8. $klassen -> minFunktion();
  9. ?>
Til jer der ikke kender $this pointeren. Den gør så at man kan pege på et specielt objekt i klassen.

3.1 Nøgleordet final
Det er blevet beskrevet før, så jeg citerer:
Final har den funktion at gøre så klassen/funktionen/variablen ikke kan overskrives.
Eksempel:
  1. <?php
  2. class EnKlass {
  3. # Variabler
  4. final public function Hej() {
  5. print ”Hej”;
  6. }

  7. public function Hej() { // Vil altså give en fejl, da funktionen Hej er deklareret final
  8. print ”Noget andet”;
  9. }

  10. }
  11. ?>
Final er lige til at gå til :].

4. Konstruktøren/Destruktøren
Konstruktøren er en funktion i klasser, som selv starter klassen.
Fra PHP5+ behøves konstruktøren ikke at hedde det samme som klassen, men __construct
- Konstruktøren og Destruktøren sættes altid i public.
Eksempel:
  1. <?php
  2. class EnKlasse {
  3. # Variabler
  4. public function __construct() {
  5. print ”Jeg starter klassen”;
  6. }

  7. }

  8. // I stedet for:
  9. $klass = New EnKlasse;
  10. $klass -> __construct();
  11. // Kan vi bare skrive:
  12. $klass = New EnKlasse;
  13. ?>
Destruktøren bliver afviklet, når alt andet er afviklet.
Eksempel:
  1. <?php
  2. class EnKlasse {
  3. # Variabler
  4. public function __construct() {
  5. print ”Jeg starter klassen”;
  6. }

  7. public function __destruct() {
  8. print ”Jeg slutter klassen”;
  9. }

  10. }

  11. $klass = New EnKlass;
  12. ?>
Det vil udskrive:
Jeg starter klassenJeg slutter klassen
En smart ting at brugt __destruct() til er eksempelvis at bruge den til at lukke mysql (mysql_close()). Da den jo først bliver afviklet til sidst i klassen.

5. Parent, self
Parent og self er nøgleord til at hente data fra klasser. Ligesom $this pointeren, det virker bare på en anden måde.
- Parent:
Er et nøgleord, du skal bruge når du henter fra en klasse du nedarver fra

- Self:
Er et nøgleord, du kan bruge når du henter fra klassen du befinder dig i.
Obs.: Husk at sætte 2 semikoloner efter nøgleordene, ellers melder de fejl.

Her er et eksempel med self:
  1. <?php
  2. class EnKlasse {
  3. # Variabler

  4. public function __construct() {
  5. self::ud();
  6. }

  7. public function ud() {
  8. print ”Hej”;
  9. }

  10. }
  11. ?>
Det vil udskrive Hej på skærmen, hvis du altså afviklede scriptet. Jeg håber du kan se meningen med parent, såvel som med self.

6. Et færdigt script
Her er et simpelt script i klasser.
Det gør så vi kan sætte $saetning i vores klasse, også udskrive den.
  1. <?php
  2. class MinKlasse {

  3. private $saetning;

  4. public function saet( $str ) {
  5. $this -> saetning = $str;
  6. }

  7. public function udskriv() {
  8. print $this -> saetning;
  9. }

  10. }

  11. $clas = New MinKlasse;
  12. $clas -> saet( "Hej med dig :-)" );
  13. $clas -> udskriv();

  14. // Det vil udskrive Hej med dig :-)
  15. // Da vi har sat $this -> saetning til at være "Hej med dig :-)"

  16. ?>
Det er ikke noget avanceret script, så det burde være til at forstå.
Men leg lidt med det.

6. Slutning
Her til slut vil jeg bare sige, at jeg håber i har nydt artiklen, og lært noget af den.
Måske skriver jeg en anden en. Om abstrakte klasser, og instance. Men jeg mente ikke at det skulle med i denne omgang.

Held og lykke med klasserne!

Mikkel Olsen //out
Sidst redigeret 16:23 - 22/10/2006
Oprettet af:

PHP

Point modtaget: 0

Rate:
14:25 22/10/2006

Kommentarer

Giv din mening tilkende om denne artikel, eller læs andres.
Har du spørgsmål eller brug for hjælp til denne artikel henvises du til forummet.
Den er okay :)
Oprettet af:
  Mail
20:48 21/01/2007
Fin artikel for begyndere, i guess.

syntes dog ikke du burde lave så mange eksempler hvor du udskriver tekst i selve klassen. Bare min mening..
og du burde nok også forklare static functions til dem der ikke kender det.

OOP is the way to go..
Oprettet af:
  Mail
06:10 28/03/2007
God artikel.
Oprettet af:
  Mail
22:03 16/04/2007
Rigtig god artikel, du beskriver alt rigtig godt, jeg har virkelig lært noget.

5/5! :D
Oprettet af:
  Mail
16:29 20/05/2007
Jeg synes ikke artiklen forklare nok, jeg har ikke lært særlig meget, men lidt lærer man vel d:
Oprettet af:
  Mail
20:40 07/09/2007
Du skal være oprettet og logget ind for at kommentere en artikel
Copyright © Rowl.dk v/ Michael Raagaard | 2005-12 | Alle rettigheder forbeholdes