Warz Skrevet 1. mai 2009 Del Skrevet 1. mai 2009 Hei, Jeg har sett så mange forskjellige måter å gjøre ting på... Jeg har begynt å jobbe litt med OOP da jeg har hørt dette skal være så bra. Men så langt er jeg rett og slett i tvil om det er noen vits å ha en database klasse... jeg sparer vel egentlig ikke noen kode på det, eller i veldig liten grad. Hva er det som er "best practise" egentlig? Jeg vil gjerne gjøre det som er mest mulig "standard", og ønsker IKKE installere spesielle pakker for at noe skal funke på serveren min... Generelt sett ønsker jeg en metode som kan brukes på alle serveren med støtte for php 5 og mysql. Noen tips? Eksempel på det jeg mener OOP vs vanlig: OOP: $db->prep('INSERT INTO forum_topics (cat_id, title, username, views, replies) VALUES(:a, :b, :c, :d, :e)'); $db->bind(':a',$cat_id); $db->bind(':b',$title); $db->bind(':c',$username); $db->bind(':d',0); $db->bind(':e',0); $db->run(); $topic_id = $db->insertId(); Vanlig: $q = sprintf('INSERT INTO forum_topics (cat_id, title, username, views, replies) VALUES(%d, %s, %s, %d, %d)', quote_smart($cat_id), quote_smart($title), quote_smart($username), 0, 0); $res = mysql_query($q); $topic_id = mysql_insert_id(); Kanskje jeg bare bruker en "dårlig" db class.. Lenke til kommentar
AlecTBM Skrevet 1. mai 2009 Del Skrevet 1. mai 2009 (endret) Jeg bruker MDB2 (PEAR pakke) Der har du feks kun $sth = $mdb2->prepere('INSERT INTO forum_topics (cat_id, title, username, views, replies) VALUES(?, ?, ?, 0, 0)'); $res = $sth->execute(array($cat_id,$title,$username)); $topic_id = $mdb2->lastInsertID(); $sth-free(); Skal si at jeg ikke husker hvordan man henta ut siste langt til id, men det er kun en enkel linje (sjekke dok) EDIT: Fant den Endret 1. mai 2009 av AlecTBM Lenke til kommentar
Warz Skrevet 1. mai 2009 Forfatter Del Skrevet 1. mai 2009 Har faktisk vært borti den noen ganger, men den må installeres på server ikke sant? Eller er den normalt med...? En annen ting jeg glemte å si er at jeg vil helst ha noe uten copyright slik at jeg kan bruke det i absolutt alle type prosjekter... Lenke til kommentar
AlecTBM Skrevet 1. mai 2009 Del Skrevet 1. mai 2009 Dette er et pear bibliotek, så det må installeres ja, hør med hosten din om det, er mulig de vil være snille Anbefales Lenke til kommentar
Alex Moran Skrevet 1. mai 2009 Del Skrevet 1. mai 2009 Du kan også gjøre det der med PDO: $stmt = $db->prepare('SELECT * FROM table WHERE col = ?'); $stmt->execute(array('test')); $results = $stmt->fetchAll(); Ellers kan du kanskje se på noen ORM-er. Lenke til kommentar
AlecTBM Skrevet 1. mai 2009 Del Skrevet 1. mai 2009 Josh Homme: Er vell MDB2 det der også om jeg ikke tar feil? Samme som jeg skrev Lenke til kommentar
Wackamole Skrevet 2. mai 2009 Del Skrevet 2. mai 2009 Ser ut til at MDB2 og PDO ligner noe ekstremt på hverandre Lenke til kommentar
[kami] Skrevet 2. mai 2009 Del Skrevet 2. mai 2009 om du benchmarker det er overheaden av klasser merkbar. native funksjonskall er overlegent raskest, så om du har en side som hittes mye kan du tjene på å unwrappe databasespørringer fra en klasse. Lesligheten av kode (og vedlikehold) når du bruker klasser er er bedre. bruker du bind variabler vil databasen din performe bedre. php sine mysql_ funksjoner støtter ikke dette, men det er mulig å få til via pear eller database driver kall. I antall kode-linjer vil du ende omtrent likt. Lenke til kommentar
Warz Skrevet 2. mai 2009 Forfatter Del Skrevet 2. mai 2009 Takker for tips... men jeg må ha noe som er standard, altså at man ikke trenger å installere noe spesielt på server... PS, kan du oversette dette til norsk:? om du benchmarker det er overheaden av klasser merkbar. native funksjonskall er overlegent raskest, så om du har en side som hittes mye kan du tjene på å unwrappe databasespørringer fra en klasse. Lenke til kommentar
Alex Moran Skrevet 2. mai 2009 Del Skrevet 2. mai 2009 PDO er standard fra og med PHP 5.1 Lenke til kommentar
[kami] Skrevet 3. mai 2009 Del Skrevet 3. mai 2009 @Warz om du kun et ute etter perfomance, unngå klasser og bruk mysql_ funksjonene som kommer standard i php Lenke til kommentar
Ernie Skrevet 3. mai 2009 Del Skrevet 3. mai 2009 @Warz om du kun et ute etter perfomance, unngå klasser og bruk mysql_ funksjonene som kommer standard i php Har du noe grunnlag for å si at de forskjellene er særlig merkbare? Jeg vil tro ytelsesforbedringen er i størrelsesorden µs/req., med litt flaks kanskje nesten 0.1ms, og begge deler kan kalles mer eller mindre neglisjerbar forskjell. Lenke til kommentar
[kami] Skrevet 4. mai 2009 Del Skrevet 4. mai 2009 ja, i større nettsamfunn der du server flere hundre request i sekundet er forskjellen merkbar om man går med oop design. men det er jo et godt poeng du har at for de *fleste* er nok dette en mikro-optimering som man ikke trenger å gjøre. er nok mange andre lure ting man kan gjøre før man trasher lesbarhet for perfomance. Lenke til kommentar
Ernie Skrevet 4. mai 2009 Del Skrevet 4. mai 2009 ja, i større nettsamfunn der du server flere hundre request i sekundet er forskjellen merkbar om man går med oop design. Godt mulig det, men jeg har til gode å se en test som verifiserer at det i det heltatt er mulig å spare såpass mye at det er verdt det uannsett skala. Jeg blir ikke mindre skeptisk når jeg etter en kjapp test må konstantere at overhead av å opprette et objekt av en klasse og kjøre en funksjon i den klassen kontra å bare kjøre en funksjon er på ca 1µs. Du skal ha veldig mye trafikk, ha veldig mange klasser i bruk og kjøre veldig mange funksjoner i de klassene før dette lønner seg. Til sammenligning vil det å opprette og tilegne 5 variabler en verdi ta mer eller mindre samme tid, iallfall på min maskin. Derfor er jeg svært skeptisk her. men det er jo et godt poeng du har at for de *fleste* er nok dette en mikro-optimering som man ikke trenger å gjøre. er nok mange andre lure ting man kan gjøre før man trasher lesbarhet for perfomance.Ja, dessverre er det alt for mange som henger seg opp i poengløse ytelsesforbedringer. Lenke til kommentar
[kami] Skrevet 4. mai 2009 Del Skrevet 4. mai 2009 gjorde en kjapp test her: antall kall den klarte på 10 sek. (script som new'er en klasse og setter noen variabler) class wrapped: 259 roundtrips. (med include) unwrapped: 278 roundtrips. class wrapped: 267 roundtrips. (uten include) unwrapped: 273 roundtrips. ser ut som mesteparten av hitten faktisk kommer av includen, som egentlig maker sense, da disk io kan være "dyrt". Men jeg er enig med ernie, dette er ikke noen forskjeller å snakke om. Jeg ville definitvt gått for en klasseløsning. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå