"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