02. januar 2009 - 19:45Der 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.
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.
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.) :)
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?
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.
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 } }
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]; }
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å.
Synes godt om
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);
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.
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)
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...
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.