Brugernavn:




Kodeord: Husk
Forside Forum Artikler Downloads Søg
 

PHP og Classes- OOP del 1

Forord

Her kan du lære lidt om OOP eller Objekt orinteret programmering i PHP. Denne del vil handle om Klasser eller nærmere betegnet. Classes
Husk allesammen at sige tak til spolit for ideen til at lave denne Artikel

Velkommen til min artikel om Classes, som er en del af PHP-OOP
Først og fremmest, vil jeg sige tak for ideen til at lave denne artikel, og også sige tak til dig som læser for at ville læse denne artikel

Hvad er OOP
OOP står for Objekt orinteret programmering -Stammer fra det engelske. Og tanken bag det er faktisk at bygge sit programmering
op om et objekt. Der kommer Classes eller Klasser ind i billedet.

Hvad er klasser
Klasser er lidt lign. funktioner, bare meget nemmere og overskuelige at benytte.
Lad os f.eks tænke os til vi ejer en Nintendo wii (Blær jer nu ikke jer som faktisk ejer en ;) )
Vi ved hvad der er uden på, kaldet indkapsling Vi ved hvad den bruges til kaldet Abstraktion men vi ved
sikkert ikke hvad den er lavet af, og hvordan. På samme tid kan vi se, at Nintendo wii ejer nogle af de egenskaber nintendo 64
gjorde, dette kaldes Arv
Disse 3 ting Indkapsling, Abstraktion, Arv Benyttes alle i daglidags ting, og også i objekter.

Lad os komme igang
Jeg vil nu vise jer et stykke kode af en Class. Bare rolig, jeg vil både løbende forklare men også bagefter.
  1. class Nintendowii { //Her starter vi classes og giver den et navn
  2.     //Vi sætter variabler
  3.     var $pris;    
  4.     
  5.     function Nintendowii() { //Vi opretter en funktion kaldet Nintendowii
  6.         $this->pris = 4000;
  7.     }

  8.     function ny_pris($ny_pris) {//Vi opretter en funktion kaldet ny_pris
  9.         $this->pris = $ny_pris;
  10.     }
  11.     function vis_pris() { //Vi opretter en funktion kaldet vis_pris
  12.         echo "Pris: ". $this->pris . "<br>";
  13.     }
  14. } // Klasse slut

  15. $Nintendowii = new Nintendowii; //Vi beder om at få lavet en ny instans af klasses Nintendowii        
  16. $Nintendowii->vis_pris(); //Vi beder klassen Nintendowii om at køre funktionen vis_pris
  17. $Nintendowii->ny_pris(2000); //Vi beder klassen Nintendowii om at køre funktionen ny_pris med et nyt beløb af 2000
  18. $Nintendowii->vis_pris(); //Vi beder klassen Nintendowii om at køre funktionen Vis_pris
Lidt forklaring
Som i kan se opretter vi en klasse ved at bruge Class Navn { -Husk, at navnet på classes altid skal begynde med STORT

inden i denne klasse definere vi variabler ved brug af "Var $variabelnavn" disse variabler kan bruges overalt i klassen.

Efter det opretter vi vores funktioner, ( Funktioner inden i klassen, wow )

Inden i funktionerne, kan vi så sætte $pris variablen ved brug af $this->variabelnavn = $pris

( $this-> ) betyder simpelthen bare at det er inden i denne klasse.

Uden for klassen, opretter vi så en ny instans af klassen som kan benyttes, dette gør vi med "$klassevariabelnavn = new klassenavn;

herefter kører vi vores funktioner med $klassevariabelnavn->funktionsnavn

Simpelt ikke?

Nu har jeg givet jer en forklaring af hvordan klasser rent faktisk virker, så de næste eksempler jeg vil fremføre bliver der mindre forklaring ( Bare rolig forklaring bliver der )
men eftersom at det ligner hinanden burde i kunne forstå det hele.

  1. class Nintendowii { //Her starter vi classes og giver den et navn
  2.     //Vi sætter variabler
  3.     var $pris;    
  4.     var $farve; //vi har tilføjet en ny variabel kaldet Farve
  5.     
  6.     function Nintendowii() { //Vi opretter en funktion kaldet Nintendowii
  7.         $this->pris = 4000;
  8.         $this->farve = "hvid"; //Opretter en ny standard værdi til variablen farve
  9.     }

  10.     function ny_data($ny_pris, $ny_farve) {//Vi opretter en funktion kaldet ny_data
  11.         $this->pris = $ny_pris;
  12.         $this->farve = $ny_farve;
  13.     }
  14.     function vis_data() { //Vi opretter en funktion kaldet vis_dara
  15.         echo "Pris: ". $this->pris . " -Farve: ".$this->farve."<br>";
  16.     }
  17. } // Klasse slut

  18. $Nintendowii = new Nintendowii; //Vi beder om at få lavet en ny instans af klasses Nintendowii        
  19. $Nintendowii->vis_data(); //Vi beder klassen Nintendowii om at køre funktionen vis_data
  20. $Nintendowii->ny_data(2000, "grøn"); //Vi beder klassen Nintendowii om at køre funktionen ny_data med et nyt beløb af 2000 og farven grøn
  21. $Nintendowii->vis_data(); //Vi beder klassen Nintendowii om at køre funktionen Vis_data
Hurtig forklaring
Som i kan se gør vi det samme som i sidste eksempel. denne gang har vi bare tilføjet en farve variabel.
Vi sætter den ind i en ny data, og vis data funktion og gør så den også kan ændres, ikke det vilde der.

Nu har vi lært at oprette funktioner, at bruge dem og at indsætte nye argumenter ( Variabler )
Nu vil jeg som det sidste vise jer hvordan i "arver" mellem klasser.

  1. class Nintendowii { //Her starter vi classes og giver den et navn
  2.     //Vi sætter variabler
  3.     var $pris;    
  4.     var $farve; //vi har tilføjet en ny variabel kaldet Farve
  5.     
  6.     function Nintendowii() { //Vi opretter en funktion kaldet Nintendowii
  7.         $this->pris = 4000;
  8.         $this->farve = "hvid"; //Opretter en ny standard værdi til variablen farve
  9.     }

  10.     function ny_data($ny_pris, $ny_farve) {//Vi opretter en funktion kaldet ny_data
  11.         $this->pris = $ny_pris;
  12.         $this->farve = $ny_farve;
  13.     }
  14.     function vis_data() { //Vi opretter en funktion kaldet vis_dara
  15.         echo "Pris: ". $this->pris . " -Farve: ".$this->farve."<br>";
  16.     }
  17. }

  18. //vi opretter en klasse mere kaldet Nintendowii_opdatering
  19. class Nintendowii_opdatering extends Nintendowii {
  20.     var $hukommelse;

  21.     function ny_hukommelse($ny_hukommelse) {
  22.         $this->hukommelse = $ny_hukommelse;
  23.     }    

  24.     function vis_hukommelse() {
  25.         echo "Hukommelse: ". $this->hukommelse ." GB";
  26.     }
  27. }

  28. $Nintendowii = new Nintendowii_opdatering; //Vi beder om at få lavet en ny instans af klasses Nintendowii_opdatering som har arvet alle egenskaber fra klassen Nintendowii        
  29. $Nintendowii->vis_data(); //Vi beder klassen Nintendowii_opdatering om at køre funktionen vis_data
  30. $Nintendowii->ny_data(2000, "grøn"); //Vi beder klassen Nintendowii_opdatering om at køre funktionen ny_data med et nyt beløb af 2000 og farven grøn
  31. $Nintendowii->vis_data(); //Vi beder klassen Nintendowii_opdatering om at køre funktionen Vis_data
  32. $Nintendowii->ny_hukommelse(20); //vi sætter hukommelsen til 20 GB
  33. $Nintendowii->vis_hukommelse(); //vi beder klassen Nintendowii_opdatering om at køre funktionen Vis_hukommelse

Hurtig forklaring
I dette eksempel, opretter vi en klasse mere kaldet Nintendowii_opdatering. vi sætter den på at "extends Nintendowii" hvilket betyder at den skal arve alle funktioner og oplysninger fra klassen Nintendowii
Derefter kan du sikkert, hvis du har læse hele artiklen igennem, se hvad den ellers gør.

Nu vil jeg sige tak for denne gang igen igen.
Hvis i har spørgsmål, ris eller ros er i velkomne til at sende en besked til mig. Og så skriv da lige lidt feedback
The-Freaker
Oprettet af:

PHP

Point modtaget: 300

Rate:
17:36 27/03/2008

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.
Ingenious. Tak for artiklen, som, bortset fra et par få stavefejl, var meget nær perfekt. Det er et rigtig godt eksempel, du har valgt, og du forklarer det på en god måde. Fem herfra!
Oprettet af:
  Mail
23:15 27/03/2008
FEDT!
Du er god til at forklare! Det må jeg sige, godt lavet mester :)..
Oprettet af:
  Mail
09:25 28/03/2008
Flot lavet. Men slap dog af! med dine artikler ! :D Du er syg til at lave dem (; Flot arbejde!
Oprettet af:
  Mail
10:39 28/03/2008
Tak for det. Endelig er der en der kan forklare det, så jeg kan forstå det ... 5!
Oprettet af:
  Mail
17:21 01/04/2008
Jeg har ikke læst den helt igennem men jeg vil sige at den først fejl jeg stødte på var at du slrev hvad OOP stod for.. det var egentlig ikke en så gal en fejl men du skruver objekt med stort o, og så vidt jeg ved så stå oop ikke for objekt, men Objekt Orienteret Programmering, som jeg sagde en mindre fejl..
Har ikke givet karakter endnu.. gør jeg når jeg har læst den færdig.
Oprettet af:
  Mail
23:50 01/04/2008
Jeg har endnu ikke givet karakter, men det gør jeg, når jeg har skrevet dette indlæg. Det bliver nok 2-3/5, desværre. Da jeg begyndte at læse artiklen, tænkte jeg ordret "Det virker faktisk som om, han ved, hvad han snakker om," og det gør du bestemt, ingen tvivl om det. Du har lært en masse om visse aspekter i OOP, men du har udeladt en del. For eksempel synes jeg ikke det giver den mindste smule mening, at du i en så kort artikel udelader en så vital del af OOP: public, private og protected. Det er selvfølgelig ikke meningen, at man skal proppe en helvedes masse aspekter i OOP ind under én artikel, men OOP uden de 3 level modifiers er som en Nintendo Wii uden det der joystick.

Derudover har du en fejl, som kunne forvirre nybegyndere indenfor OOP: Klasser behøver ikke, og har aldrig behøvet, og vil aldrig behøve, at starte med stort forbogstav.

Til din forklaring af $this vil jeg sige både og. Men du kan godt have en variable i klasse1 og bruge $this på den i klasse2, hvis du bruger extends til at nedarve fra klasse1. Og selvom klasse2 så har arvet variablen fra klass1, så vil den jo originalt være placeret i klasse1. Så at sige, at $this er en pointer, der peger på det sted i hukommelsen, hvor alle klasse2's medlemmer ligger, vil nok være mere korrekt.

Men hvis vi skal kigge på de ting, du rent faktisk har med i artiklen, så vil jeg også sige, du forklarer dig godt og din opstilling er udmærket. Dog forstår jeg ikke, hvorfor du har puttet forklaringer i citationsbokse, men pyt med det.
Sidst redigeret 14:02 06/04/2008
Oprettet af:
  Mail
13:59 06/04/2008
Hej Dexo.
Selføldig skal det ikke være med stort. Men plejer som hovederegl at sige "SKRIV den nu bare med stort" det blev jeg sparket i hovede og popoo med da jeg fik det lært. Sorry hvis det lyder somom den skal :)
-Hvad angår Public, Private og Protected kan jeg godt se hvad du mener, og er klart en fejl at de ikke er med. Mener dog ikke at det er noget jeg bør sætte newbs ind i.

Kan godt se jeg mangler lidt med $this. Også min fejl. Tak for kommentaren ;) der er noget at arbejde på
Oprettet af:
  Mail
22:49 08/04/2008
Nu skal jeg lige se om jeg er med (har aldrig forstået OOP rigtigt)

1: en "class" er bare en samling af funktioner?

2: f.eks. "class bar extends foo {}" er en fortsætning af klassen "foo"?
Oprettet af:
  Mail
22:20 26/01/2009
Det er korrekt kaalakiota.
Oprettet af:
  Mail
15:07 23/05/2009
Du skal være oprettet og logget ind for at kommentere en artikel
Copyright © Rowl.dk v/ Michael Raagaard | 2005-12 | Alle rettigheder forbeholdes