Skrevet fre. d. 02. januar 2009 kl. 20:00:24| #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.
Skrevet fre. d. 02. januar 2009 kl. 20:17:33| #2
classes
Som webcreator forklarer giver det ikke hurtigere kode men lavere vedligeholdelses
omkostninger.
Skrevet fre. d. 02. januar 2009 kl. 21:02:38| #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.) :)
Skrevet fre. d. 02. januar 2009 kl. 22:13:29| #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 :-)
Skrevet lør. d. 03. januar 2009 kl. 00:13:05| #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/ (...)
Skrevet lør. d. 03. januar 2009 kl. 01:36:49| #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
}
}
Skrevet lør. d. 03. januar 2009 kl. 11:03:21| #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';
}
Skrevet lør. d. 03. januar 2009 kl. 12:21:29| #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å.
Skrevet lør. d. 03. januar 2009 kl. 12:49:43| #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);
Skrevet lør. d. 03. januar 2009 kl. 12:56:07| #10
Prøv evt. kig her, det kan måske give dig et lidt bedre indblik:
http://devzone.zend.com/ (...)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... ";
}
}
?>
Skrevet lør. d. 03. januar 2009 kl. 17:13:43| #11
re 22:13:29)
objekt orienteret versus procedural programmering har intet med performance at gøre
Skrevet lør. d. 03. januar 2009 kl. 17:16:13| #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
Skrevet lør. d. 03. januar 2009 kl. 17:18:58| #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.
Skrevet lør. d. 03. januar 2009 kl. 20:43:32| #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>
Skrevet søn. d. 04. januar 2009 kl. 22:03:07| #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 :-)
Skrevet fre. d. 09. januar 2009 kl. 00:59:05| #16