/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
klasser og funktioner
Fra : Ukendt


Dato : 13-01-05 20:16

Hej

Jeg har et lidt overordnet spørgsmål vedr. klasser og funktioner i PHP.

Hvornår og hvorfor skal/kan/bør man anvende klasser, fremfor funktioner.

Eks. Jeg har 10 forskellige funktioner alle sammen til at vise noget tekst
på en bestemt måde. Er der reelt nogen forskel på om jeg opretter dem som
"enkeltstående" funktioner fremfor at oprette dem som metoder i en klasse?

/Regin Madsen



 
 
Thomas Lindgaard (13-01-2005)
Kommentar
Fra : Thomas Lindgaard


Dato : 13-01-05 22:45

On Thu, 13 Jan 2005 20:16:09 +0100, Regin Madsen wrote:

> Hvornår og hvorfor skal/kan/bør man anvende klasser, fremfor funktioner.
>
> Eks. Jeg har 10 forskellige funktioner alle sammen til at vise noget tekst
> på en bestemt måde. Er der reelt nogen forskel på om jeg opretter dem som
> "enkeltstående" funktioner fremfor at oprette dem som metoder i en klasse?

Klasser kommer fra objekt-orienteret programmering, og her er meningen
kort fortalt, at man modellerer en-eller-anden dims - f.eks. en
kaffeautomat.

class Kaffeautomat
{
function Kaffeautomat($color = 'red')
{
$this->color = $color;
}

function LavKaffe($type = 'sort')
{
switch ($type) {
case 'med fløde':
$this->kaffe = $this->Bryg();
$this->kaffe += 'fløde';
break;
case 'sort':
$this->kaffe = $this->Bryg();
break;
}
return $this->kaffe;
}

function Bryg()
{
...
}
}

Så kan man lave en instans af sin kaffe automat:

$kaffeautomat = new Kaffeautomat('brun');

Nu har jeg en brun kaffeautomat - så kan der laves kaffe:

$min_kaffe = $kaffeautomat->LavKaffe('med fløde');

.... og det kan man så drikke - FØJ for den lede... skulle have været en
kakaoautomat!

Det var sårn den hurtige gennemgang af objekt-orientering :) - man
modellerer en dims vha. en klasse og for hver ting, som dimsen kan, laves
en metode, som gør det.

Hvis man skal lave et lidt mere dagligdags eksempel, kunne det se ud som
følger:

class Mysql
{
function Mysql($server, $username, $password, $database)
{
$this->db = mysql_connect($server, $username, $password);
mysql_select_db($database);
}

function Query($sql)
{
$this->result = mysql_query($sql, $this->db);
$this->query_counter++;
return $this->result;
}

function GetRow()
{
return mysql_fetch_assoc($this->result);
}

function GetNumQueries()
{
return $this->query_counter;
}
}

Nu kan man så sige:

$db = new Mysql('localhost', 'brugernavn', 'kodeord', 'database');
$db->Query('SELECT * FROM tabel');
while ( $row = $db->GetRow() )
{
print_r($row);
}

Her har man så en instans af sin Mysql-klasse ($db), som i sig har
metoder til at kommunikere med databasen. Det samme kan laves med
almindelige funktionskald, men det er ikke lige så pænt pakket ind.

Håber det hjalp.

Det skal lige siges, at al den ovenstående kode er skrevet on-the-fly,
så det er med garanti ikke fejlfrit.

--
Mvh.
/Thomas


Ukendt (13-01-2005)
Kommentar
Fra : Ukendt


Dato : 13-01-05 23:16


"Thomas Lindgaard" <thomas@it-snedkeren.BLACK_HOLE.dk> wrote in message
news:pan.2005.01.13.21.44.44.625967@it-snedkeren.BLACK_HOLE.dk...
> On Thu, 13 Jan 2005 20:16:09 +0100, Regin Madsen wrote:
>
>> Hvornår og hvorfor skal/kan/bør man anvende klasser, fremfor funktioner.
>>
>> Eks. Jeg har 10 forskellige funktioner alle sammen til at vise noget
>> tekst
>> på en bestemt måde. Er der reelt nogen forskel på om jeg opretter dem som
>> "enkeltstående" funktioner fremfor at oprette dem som metoder i en
>> klasse?
>
> Klasser kommer fra objekt-orienteret programmering, og her er meningen
> kort fortalt, at man modellerer en-eller-anden dims - f.eks. en
> kaffeautomat.
>
> class Kaffeautomat
> {
> function Kaffeautomat($color = 'red')
> {
> $this->color = $color;
> }
>
> function LavKaffe($type = 'sort')
> {
> switch ($type) {
> case 'med fløde':
> $this->kaffe = $this->Bryg();
> $this->kaffe += 'fløde';
> break;
> case 'sort':
> $this->kaffe = $this->Bryg();
> break;
> }
> return $this->kaffe;
> }
>
> function Bryg()
> {
> ...
> }
> }
>
> Så kan man lave en instans af sin kaffe automat:
>
> $kaffeautomat = new Kaffeautomat('brun');
>
> Nu har jeg en brun kaffeautomat - så kan der laves kaffe:
>
> $min_kaffe = $kaffeautomat->LavKaffe('med fløde');
>
> ... og det kan man så drikke - FØJ for den lede... skulle have været en
> kakaoautomat!
>
> Det var sårn den hurtige gennemgang af objekt-orientering :) - man
> modellerer en dims vha. en klasse og for hver ting, som dimsen kan, laves
> en metode, som gør det.
>
> Hvis man skal lave et lidt mere dagligdags eksempel, kunne det se ud som
> følger:
>
> class Mysql
> {
> function Mysql($server, $username, $password, $database)
> {
> $this->db = mysql_connect($server, $username, $password);
> mysql_select_db($database);
> }
>
> function Query($sql)
> {
> $this->result = mysql_query($sql, $this->db);
> $this->query_counter++;
> return $this->result;
> }
>
> function GetRow()
> {
> return mysql_fetch_assoc($this->result);
> }
>
> function GetNumQueries()
> {
> return $this->query_counter;
> }
> }
>
> Nu kan man så sige:
>
> $db = new Mysql('localhost', 'brugernavn', 'kodeord', 'database');
> $db->Query('SELECT * FROM tabel');
> while ( $row = $db->GetRow() )
> {
> print_r($row);
> }
>
> Her har man så en instans af sin Mysql-klasse ($db), som i sig har
> metoder til at kommunikere med databasen. Det samme kan laves med
> almindelige funktionskald, men det er ikke lige så pænt pakket ind.
>
> Håber det hjalp.
>
> Det skal lige siges, at al den ovenstående kode er skrevet on-the-fly,
> så det er med garanti ikke fejlfrit.
>
> --
> Mvh.
> /Thomas
>

Jeg har for nogle år tilbage kodet en del Java, men har ikke brugt object
begrebet siden, så det er mest fordi jeg er blevet lidt rustent i det. Kan
godt se indpakningen er pænere og det, men da PHP så vidt jeg ved ikke er
helt objekt orienteret manglede jeg mest lige det der hint om hvorfor pokker
man nu skulle bruge klasser frem for blot funktioner.

indtil nu har jeg mest brugt klasser når jeg har haft en samling af lidt
mere specielle funktioner der samtidigt skulle benytte en rækker variabler
imellem sig - for lige som at afgrænse det lidt, men hvornår bruger i andre
klasser frem for funktioner? Altid, aldrig, eller i bestemte situationer?!?
håber jeg har gjort det lidt mere tydeligt hvad jeg spørger om

/Regin Madsen



Bertel Lund Hansen (14-01-2005)
Kommentar
Fra : Bertel Lund Hansen


Dato : 14-01-05 00:28

"Regin Madsen" <rjm(AT)mrfraggle.dk> skrev:

>imellem sig - for lige som at afgrænse det lidt, men hvornår bruger i andre
>klasser frem for funktioner? Altid, aldrig, eller i bestemte situationer?!?
>håber jeg har gjort det lidt mere tydeligt hvad jeg spørger om

Det er et designvalg man bedst foretager inden man overhovedet
skriver noget kode.

At oprette en klasse blot for at have et sted at putte en metode
hen, er at gå over åen efter vand.

Hvis det er logisk at et program har nogle objekter med nogle
givne egenskaber, giver det mening at oprette en klasse pr.
objekt og samle alle objektets egenskaber i interne metoder og
attributter.

Nogle af dem der gik på min datamatikerskole, kan slet ikke andet
end objektorienteret design og programmering.

Selv bruger jeg af gammel (og til dels dårlig) vane mest
sekventiel programmering. Et godt klassedesign er meget nemmere
at overskue end en kilometerlang liste med diverse funktioner og
subfunktioner.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Jacob Atzen (14-01-2005)
Kommentar
Fra : Jacob Atzen


Dato : 14-01-05 01:24

On 2005-01-13, Regin Madsen <> wrote:
[snip]
> Jeg har for nogle år tilbage kodet en del Java, men har ikke brugt
> object begrebet siden, så det er mest fordi jeg er blevet lidt rustent
> i det. Kan godt se indpakningen er pænere og det, men da PHP så vidt
> jeg ved ikke er helt objekt orienteret manglede jeg mest lige det der
> hint om hvorfor pokker man nu skulle bruge klasser frem for blot
> funktioner.

Bare fordi man kaster sine funktioner ind i nogen klasser bliver det
ikke nødvendigvis OO af den grund. For rigtig at få glæde af de
faciliteter OOP tilbyder, skal man først ændre sin tankegang, fra at
tænke i sekvenser af funktioner til at tænke i objekter og deres
samspil.

Følgende artikel giver en rigtig god introduktion til en del af formålet
med OOP:

<http://www.sitepoint.com/forums/showthread.php?t=59898#post439958>

Bemærk, at der er fejl i koden i eksemplet i afsnit 3.

Artiklen beskæftiger sig dog primært med samspillet mellem objekter. Et
andet aspekt af OOP er muligheden for "information hiding". Med OOP kan
man nøjes med at dele de informationer, der er relevante med sin
omverden. Resten kan være gemt væk i klassen. Det betyder, at din kode
bliver mere "løst-koblet". Eller sagt på en anden måde, at ændringer et
sted i koden kan holdes der og ikke breder sig til resten af koden.

Det skal siges, at man principielt kan opnå de samme ting med funktionel
programmering, omend det stiller noget større krav til programmøren. Så
hvorvidt man er til OOP eller traditionel funktionel programmering er
mest et spørgsmål om temperament.

> indtil nu har jeg mest brugt klasser når jeg har haft en samling af lidt
> mere specielle funktioner der samtidigt skulle benytte en rækker variabler
> imellem sig - for lige som at afgrænse det lidt, men hvornår bruger i andre
> klasser frem for funktioner? Altid, aldrig, eller i bestemte situationer?!?

Jeg bruger stort set altid klasser, hvis det er kode, der skal overleve
længere end de næste 5 minutter. Mange har svært ved helt at komme ind i
den objekt orienterede tankegang. Men de fleste er enige om, at de har
svært ved at vende tilbage til "funktionsorienteret" programmering, når
først de har set lyset.

Hvis du har yderligere spørgsmål må du endelig sige frem. Det er så
sjældent, der er nogen der udtrykker interesse for OOP her i gruppen

--
Med venlig hilsen
- Jacob Atzen

Jacob Atzen (14-01-2005)
Kommentar
Fra : Jacob Atzen


Dato : 14-01-05 01:00

On 2005-01-13, Regin Madsen <> wrote:
> Hvornår og hvorfor skal/kan/bør man anvende klasser, fremfor funktioner.

Når man føler det giver bedre kode

Bedre kode kan så være mange ting. Personligt går jeg meget op i
læsbarhed. Så hvis jeg kan læse og forstå koden bedre, ved at gøre den
objekt orienteret, så foretrækker jeg det.

> Eks. Jeg har 10 forskellige funktioner alle sammen til at vise noget
> tekst på en bestemt måde. Er der reelt nogen forskel på om jeg
> opretter dem som "enkeltstående" funktioner fremfor at oprette dem som
> metoder i en klasse?

Måske, måske ikke. Det lyder umiddelbart som noget, hvor du kunne få
glæde af at benytte OOP. Du bliver nok nødt til at være lidt mere
konkret, hvis vi skal kunne komme med forslag til design.

--
Med venlig hilsen
- Jacob Atzen

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste