Function vs. Class

Tags:    php

Hey Udviklere..

Jeg vil høre om der ikke er nogen, der kort kan forklarer mig forskellen på Fuction og Class i PHP og hvilke fordelle/ulemper de har?

Mvh

Sol



6 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Funktioner og klasser er 2 vidt forskellige ting. Klasser er en form for objekter i php og kan indeholde funktioner. Jeg har lavet et ret lamt eksempel, men det forklarer forskellen rimelig godt.

Fold kodeboks ind/udKode 





Teknisk set er der ikke den helt store forskel på classes og funktioner, men igen så er der en verden til forskel, jeg vil prøve at lave et par eksempler, jeg vil tage udgangs punkt basisk tekst manipulering:

1. eksempel man kan godt bruge en class som et slags funktions library

Følgende funktioner:
Fold kodeboks ind/udKode 


kan omskrives til:
Fold kodeboks ind/udKode 


Hvis du vælger at bruge denne model til dine classes får du ikke noget som helst ud det andet end det faktisk ser lidt pænere ud kode mæssigt. Der hvor du virkelig begynder at kunne drage nytte af classes er når du bruger dem som objects. Hvis du virkelig vil drage nytte af classes, skal du først begynde at se på objekter som du ser dem i virkelighedens verden. tag en kugle pen som eksempel, tag en kugle pen op og se hvad den kan gøre, man kan i de fleste tilfælde trykke på knappen i enden og så kommer spidsen frem og trykker man på den igen forsvinder den, hvis det skulle om skrives til et object ville det se sådan her ud
Fold kodeboks ind/udKode 


hvis du kan se princippet i hvordan det fungere, så kan vi komme igang med den lidt mere "indviklede" del.

Hele filosofien i object orienteret programmering er at det skal være let at skifte en specifik del af koden ud for at tilføre nye features osv. men lad os fortsætte med kuglepennen, lad os sige du gerne vil have en af de der kugle penne med en hel masse farver i, og så kan trykke en ud af gangen, du kan sikkert godt huske dem, sådan en fætter der til forvirring lige så godt kunde være en dildo der gemte sig i din sidepige's penalhus ;-)

jeg vil bruge classen oppe over uden at lave nogen som helst ændringer til den, jeg vil istedet tilføje en ny classe

Fold kodeboks ind/udKode 


Håber du kan se hvordan man kan bruge classes til at tilføje features uden at skulle ændre i gammel kode. det er bare en af fordelene ved object orienteret programmering. men efter som der er skrevet bøger om emnet kan jeg blive ved med fordelene ved det. håber ihvertfald at mine eksempler har gevet dig lidt bedre insight i hvordan det fungere..



privat gør at det kun er objektet selv der kan gøre brug af koden. Mens public betyder at man direkte kan gøre brug af det.
f.eks ville man normalt lave et objekts variabler private og så lave funktioner til at rette og hente værdien af variablen public. Så en bruger af klassen ikke kan gøre det som jeg sagde man ikke skulle gøre i foregående post.
Fold kodeboks ind/udKode 

skal nok lige siges at både privat og public kun findes fra php5 og op.

du skal bruge BallPen som du kan se fordi at han type hinter i addBallPen functionen.
så for at køre koden skal du bruge både MultiColorBallPen og BallPen samt køre PHP 5+.

Du kan godt hente farverne fra en database.
Fold kodeboks ind/udKode 


du kan godt lave en menu af som en class.
Fold kodeboks ind/udKode 





Function er lige det, en funktion.

Class er en klasse, den kan indeholde funktioner og variabler. Ideen i at bruge en klasse er til at beskrive et eller andet. Hvis du f.eks. havde en bil og du ville beskrive bilens hastighed, hvor mange liter dens tank kan indeholde og hvor langt den køre på literen, og sammentidig ville du gerne have muligheden for at få bilen til forskellige ting. Så kunne du implementere din bil som en klasse, og så kunne du opretter flere instanser af din bil klasse. Hver instans ville så have sine egne værdier angivet i de forskellige ting du vil have beskrevet.

Klasser og funktioner er altså to vidt forskellige ting, som ikke bør bruges til samme formål.



Indlæg senest redigeret d. 10.12.2006 19:24 af Bruger #2330
lige en bemærkning du burde rent praktisk aldrig sætte et objekts variabler direkte. ikke at jeg nogen sinde selv har overholdt det :).

At gøre det gør det sværer senere at rette i classen.

hvis du f.eks lavet en variable kaldet

var $name

i din klasse og senere accessed den variable direkte i flere forskellige filer.

ville du når du fandt ud af at du ville kalde variablen for f.eks
var $fullName;

skulle rette i alle disse steder.
hvorimod hvis du havde brugt en funktion i classen f.eks.

function setName($aName){
$this->name=$aName;
}

kun skulle rette denne funktion til.
function setName($aName){
$this->fullName=$aName;
}

og ikke nogen andre steder.

det samme gælder selvfølgelig også når du henter et objekts variable værdi bør du ikke tilgå det direkte men gennem en funktion.




Håber du kan se hvordan man kan bruge classes til at tilføje features uden at skulle ændre i gammel kode. det er bare en af fordelene ved object orienteret programmering. men efter som der er skrevet bøger om emnet kan jeg blive ved med fordelene ved det. håber ihvertfald at mine eksempler har gevet dig lidt bedre insight i hvordan det fungere..


Det vil sige, at hvis jeg fx. vil lave en menustruktur, så vil det kunne betale sig at bygge det som en class eller skal jeg helst bruge en function til det?

Har i nogle forslag til læsning om emnet?


Multicolor Class Spørgsmål:
Fold kodeboks ind/udKode 


Så har jeg et spørsmål til koden.. Kan jeg fx. trække data fra databasen om farven på den Multicolorpen?

Og skal jeg både bruge koden fra det første eksempel med kuglepennen og koden fra det sidste eksempel for at få det til at virke multicolorpennen eller står MulticolorClass alene?

Hvad betyder de 2 udtryk private og public? Er det fx. public = mulighed for brugerinput? Private = Ting der er fast defineret og ikke synligt for brugeren?

Håber i forstår mine spørgsmål ellers må i lige skrive.

Mvh

Sol



t