Avatar billede kjeldsted Novice
02. januar 2009 - 19:45 Der er 14 kommentarer og
2 løsninger

Classes vs. Functions?

Hej alle PHP eksperter.

Jeg fik engang af vide at jeg burde begynde at skifte mine funktioner (altså de funktioner jeg selv har lavet med function navn(){}) ud med classes, da dette skulle gøre systemet hurtigere.

Nu var jeg den gang godt i gang med flere systemer hvor jeg ikke ville ændre alle mine functions.

Jeg tænke så på om dette var værd at gøre med det næste projekt, eller om dette vil være helt tåbeligt.

Jeg kan oplyse at jeg pt. ikke har arbejdet så meget med classes (har aldrig rigtig brugt det i praksis) så i fald jeg skal skifte over skal der lige læses på lektien først.

Det eneste jeg ønsker fra jer er bare jeres mening og man bør bruge functions eller classes som functions.
Avatar billede webcreator Nybegynder
02. januar 2009 - 20:00 #1
Hej Kjeldsted.

Klasser og funktioner er to forskellige ting.

Klasser er en måde at indkapsle data og logik (funktioner). Det er en god måde at skabe struktur i sin kode. Fx kan du have en klasse der hedder Bil, med attributter (variabler) ved navn Farve, Størrelse, MaxHastighed osv. Derudover kan du have funktionerne Start(), Stop(), Koer(), Bak() osv.

Man anbefaler ofte den Objekt Orienterede tilgang (brugen af klasser), da det, ved korrekt brug, typisk giver kode der er nemmere at vedligeholde og genbruge.

Korrekt Objekt Orienteret Programmering er ikke noget man bliver 100-meter champ til på en weekend, så jeg vil anbefale dig at købe en god bog om emnet, eller google dig lidt frem til relevante artikler.
Avatar billede arne_v Ekspert
02. januar 2009 - 20:17 #2
classes

Som webcreator forklarer giver det ikke hurtigere kode men lavere vedligeholdelses
omkostninger.
Avatar billede jensgram Nybegynder
02. januar 2009 - 21:02 #3
arne_v > Jo, når blot man holder sig for øje, at brugen af klasser i sig selv ikke er en garant for lavere vedligeholdelsesomkostninger (pænere kode, bedre performance etc.) :)
Avatar billede kjeldsted Novice
02. januar 2009 - 22:13 #4
Så kort sagt vil det altså på længere sigt kunne betale sig at udskifte funktioner med klasser.

Desuden var den begrundelse jeg i starten hørte at serveren ville arbejde hurtigere ved klasser end funktioner hvis jeg fx gør brug af en fil, indeholdende en del funktioner, der bliver inkluderet (include) på alle sider. Er dette også korrekt, eller?

Og desuden, tak for de foreløbelige svar :-)
Avatar billede webcreator Nybegynder
03. januar 2009 - 00:13 #5
Igen, du kan ikke udskifte funktioner med klasser. Du kan indkapsle dine funktioner i klasser. Du kan tænke på klasser som kasser. Én kasse der repræsenterer en data og logik (funktionalitet) for en Bil, en anden der repræsenterer et Æble osv. Det er simpelthen bare et spørgsmål om at samle tingene i logiske kasser (classes).

I vore dage er computerne så hurtige, at du med dit brug næppe vil mærke den mindste forskel overhovedet. Man tænker i performance når man arbejder med store enterprise løsninger, hvor tusindvis af mennesker tilgår store datamængder.

Måske er Wikipedias beskrivelse af OOP værd at kigge på (har ikke selv læst den):
http://en.wikipedia.org/wiki/Object-oriented_programming
Avatar billede Slettet bruger
03. januar 2009 - 01:36 #6
Prøv evt. fortælle hvad slags funktioner du har.
Så kan vi måske give nogen ideer til at samle dem i en klasse.

F.eks. laver jeg en klasse til at holde styr på alle mine connections til databasen.

f.eks.

class connect {
  private $dbhandler;
 
  // Denne function bliver kørt med det samme class'en bliver inkluderet
  public function __construct() {
    $this->dbhandler = @mysql_connect('localhost', 'root', '');
    @mysql_select_db('minDatabase', $this->dbhandler);
  }

  public function select_EXECquery($sql) {
      // mysql_query function
  }
}
Avatar billede kjeldsted Novice
03. januar 2009 - 11:03 #7
Det eneste jeg ved om de klasser er sådan set bare det jeg den gang hørte, nemlig at jeg ikke burde bruge funktioner med klasser (og dér er jeg så tydeligvis blevet fejl informeret).

Et eksempel på noget indhold af en funcions fil (der bliver inkluderet på alle sider/under sider) kan være som følger. Der er dog hér tale om små enkelte funktioner og i de fleste ander systemer jeg har snakker vi noget mere komplicerede funktioner, som regel.

Ét eksempel:

function jin($num)
{
    $jin_types = array('');
    mysql_select_db($database_remote, $remote);
    $jin_result = mysql_query("SELECT filnavn FROM runja_jin ORDER BY id ASC");
    while($row=mysql_fetch_row($jin_result))
    {
        array_push($jin_types,$row[0]);
    }
    return $jin_types[$num];
}
   
function kalendertype($var)
{
    $types = array('','AFTALE','OPFØLGNING','MØDE','FERIE','FRI','AFSPADSERING','KURSUS');
    $name = $types[$var];
    return $name;
}

function station($id)
{
    if($id<3 && $id>=1)
    {
        $var = ($id==1) ? '24Sjællandske' : 'SBS NET';
        return $var;
    }
    else return 'Ingen station er valgt';
}
Avatar billede webcreator Nybegynder
03. januar 2009 - 12:21 #8
Jeg vil lige rette qtax87's kommentar i koden. Han skriver at funktionen __construct bliver afviklet, når klassen bliver inkluderet. Dette er ikke korrekt, klassens konstruktør (__construct) bliver afviklet, når man skaber en instans af klassen, kaldet et objekt.

Man kan se på klasser som en slags skabelon. Den indeholder attributter (variabler), der kan indeholde data, og som også nævnt funktioner. Man skaber så en instans af klassen (et objekt), som man fylder data i, og udnytter funktionaliteten på.
Avatar billede Slettet bruger
03. januar 2009 - 12:49 #9
Ja du har helt ret webcreator, sker først når man laver en instance's.
include("minclass.php");
$dbconn = new connect();

$sql = 'SELECT * FROM table';
$dbconnect->select_EXECquery($sql);
Avatar billede Slettet bruger
03. januar 2009 - 12:56 #10
Prøv evt. kig her, det kan måske give dig et lidt bedre indblik:
http://devzone.zend.com/article/638-PHP-101-part-7-The-Bear-Necessities

Ex.

<?php
// PHP 5

// class definition
class Bear {
    // define properties
    public $name;
    public $weight;
    public $age;
    public $sex;
    public $colour;

    // define methods
    public function eat() {
        echo $this->name." is eating... ";
    }

    public function run() {
        echo $this->name." is running... ";
    }

    public function kill() {
        echo $this->name." is killing prey... ";
    }

    public function sleep() {
        echo $this->name." is sleeping... ";
    }
}

?>
Avatar billede arne_v Ekspert
03. januar 2009 - 17:13 #11
re 22:13:29)

objekt orienteret versus procedural programmering har intet med performance at gøre
Avatar billede arne_v Ekspert
03. januar 2009 - 17:16 #12
re 21:02:38)

objektorienteret gør det generelt nemmere at vedligeholde proceduralt for kode over
en vis størrelse (4 cifret antal linier)

men objektorienteret er ikke en garanti mod dårlige programmører

de kan lave katastrofer i ethvert sprog og i enhver stil
Avatar billede arne_v Ekspert
03. januar 2009 - 17:18 #13
re 00:13:05)

Jeg tror faktisk at hobby web sider tænker mere på performance end store enterprise
løsninger.

Hvis du har et budget på 7-9 cifre for udvikling, så betyder det ikke
meget for de samlede projekt omkostninger at smide nogle ekstra quad core CPU'er
in i hardware konfigurationen.
Avatar billede olebole Juniormester
03. januar 2009 - 20:43 #14
<ole>

En anden væsentlig fordel ved OOP (Objekt Orienteret Programmering) er, at vi opfatter vores omgivende virkelighed som objektorienteret  ;o)

Jeg er et objekt, som er en instans af klassen 'menneske' (som i øvrigt arver en masse fra klassen 'pattedyr').

Jeg har visse egenskaber/properties, som hver især har nogle værdier:
    min hårfarve: gråt
    min alder: 53 år
    mit køn: mand
    min nationalitet: dansk

Jeg har også visse metoder (ting, jeg kan gøre) tilknyttet. Jeg kan f.eks:
    tale
    spise
    skide

Samtidig arver min klasse 'menneske' både propeties og metoder fra 'klasserne', der kom før i evolutionen.

Denne tilpasning til den verden, vi er en del af, gør OOP væsentligt mere logisk at bruge end procedural programmering. Jo mere, du tænker over OOP på dén måde, jo tydeligere vil sammenligningen formodentlig fremstå  ;o)

/mvh
</bole>
Avatar billede kjeldsted Novice
04. januar 2009 - 22:03 #15
re 03/01-2009 17:18:58)

Jeg har også altid sagt til mig selv, mht. spørgsmål om disse "tidskrævende" koder, at om det tager serveren 1 eller 1,5 millisekund, ja, det er sku lige meget.

Jeg oprettede egentlig kun dette spørgsmål for at få be- /afkræftet om min side ville blive væsentlig hurtigere ved ikke at bruge funktionerne som jeg gør nu. Og jeg har vist efterhånden fået svar nok. Og mange, mange tak for det til jer alle.

Hvis nogle ønsker del i point summen, så smid et svar...

Og endnu engang, tak :-)
Avatar billede arne_v Ekspert
09. januar 2009 - 00:59 #16
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester