Avatar billede lakana Nybegynder
01. juli 2008 - 18:32 Der er 12 kommentarer og
2 løsninger

To klasser hvoraf den ene er afhængig af den anden

Jeg har to klasser. En til at styre mit CMS-system og en til at kontakte databasen. I min database-klasse har jeg en "query"-funktion, som jeg bruger i min "CMS"-klasse.
Er det i dette tilfælde, at man bruger "class CMS extends Database {"?
Avatar billede coderdk Praktikant
01. juli 2008 - 19:15 #1
Det kunne man godt, så kan du i din CMS-klasse bare bruge $this->query($sql) i stedet for at skulle instantiere en Database-klasse :)
Avatar billede lakana Nybegynder
01. juli 2008 - 19:23 #2
Men problemet er at jeg i min database-klasse har en __construct()-funktion, med nogle paramterere. Så den melder jo fejl.
Avatar billede arne_v Ekspert
01. juli 2008 - 19:37 #3
Hvis CMS extender Database, saa skal CMS constructor kalde Database constructor med
de rigtige parametre.

parent::__construct()

Men jeg er lidt eksptisk overfor hvorvidt CMS skal extende Database.
Avatar billede coderdk Praktikant
01. juli 2008 - 19:42 #4
Du kan også droppe parametrene, til fordel for f.eks. define()-variable - de er gode til f.eks. databaseserver, username, kodeord og databasenavn :)
Men som arne_v skriver parent::__construct()
Alternativet til at extende Database, er at instantiere den i CMS's __construct(), så kan du f.eks. kalde den med:

$this->db->query() - så er der skilt mere ud :)
Avatar billede lakana Nybegynder
02. juli 2008 - 20:30 #5
hvordan ville i så forslå at gøre det?

database og cms, skal jo hænge sammen på en måde.
Avatar billede arne_v Ekspert
02. juli 2008 - 20:35 #6
"has a" fremfor "is a" d.v.s. et field som coderdk viser 01/07-2008 19:42:43
Avatar billede coderdk Praktikant
02. juli 2008 - 22:03 #7
i.e. noget i stil med

class CMS {
  private $db;
  function __construct()
  {
      $this->db = new Database(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
  }
  function HentSide($id)
  {
      $sql = sprintf("SELECT * FROM page WHERE id = %d", $id);
      $this->db->query( $sql );
      return $this->db->GetRows();
  }
}
Avatar billede lakana Nybegynder
03. juli 2008 - 17:46 #8
Men CMS er jo ikke den eneste klasse jeg vil lave, der er afhængig af Databasen (brugersystem osv)?
Avatar billede arne_v Ekspert
03. juli 2008 - 17:53 #9
Andre klasser kan laves på samme måde.
Avatar billede lakana Nybegynder
03. juli 2008 - 18:05 #10
okay tak! :)

lige et ekstra spørgsmål. ved i hvordan de fleste CMS-systemer definerer hvilken side, der skal være forsiden?
Avatar billede lakana Nybegynder
03. juli 2008 - 18:09 #11
og læg et svar begge to
Avatar billede arne_v Ekspert
03. juli 2008 - 18:47 #12
Text ligges vel ind under et eller andet id. Og CMS viser et bestemt id som start side.
Gætter jeg på - jeg har aldrig lavet et CMS.

Og et svar.
Avatar billede coderdk Praktikant
03. juli 2008 - 23:33 #13
som arne skriver - du definerer selv en startside og henter den, hvis der ikke er blevet bedt om et id :)
Avatar billede coderdk Praktikant
03. juli 2008 - 23:33 #14
Hov, et 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