Avatar billede dulius Nybegynder
05. maj 2005 - 16:40 Der er 12 kommentarer og
1 løsning

Tilgå globale variabler i PHP5 classes?

Hej.

Jeg sidder lige og roder med nogle PHP5 classes, og de fleste bruger nogle database-queries og lign. Jeg bruger mysqli til dette. Det virker ikke ret optimalt, at oprette en ny database-forbindelse i hver enkelt class, derfor har jeg en fil config.php som bliver inkluderet i alle andre filer, og dermed også i mine classer. I denne fil har jeg følgende linje:

$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_BASE);
(argumenterne er nogle konstanter jeg har defineret længere oppe i  filen)
Hvad jeg godt kunne tænkte mig var, at kunne tilgå denne database instans alle steder fra.
Jeg er ny til objekt orienteret programmering, men ved procedural programmering ville jeg bare gøre noget lign.:

function blabla(){
GLOBAL $db;
...
}

Og så ville jeg kunne bruge $db inde fra min funktion. Hvordan lader dette sig gøre i en class?

På forhånd tak.
mvh. Julius
Avatar billede Slettet bruger
05. maj 2005 - 16:45 #1
functino blabal() {
global $db;
}

vil også virker i OOP.
Avatar billede hyberpreprocessor Nybegynder
05. maj 2005 - 16:47 #2
i OOP definere du bare $db i din constructor.'

dvs.

<?php
public class foo
{
  private $db;

  public function foo()
  {
    $db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_BASE);
    $this->db = $db;
  }

}
?>
Avatar billede Slettet bruger
05. maj 2005 - 16:48 #3
hyperpreprocessor hvad gør "private" og "public" ?
Avatar billede hyberpreprocessor Nybegynder
05. maj 2005 - 16:50 #4
private variabler gør at du ikke kan tilgå dem med

$obj = new Obj();
echo $obj->foo;

Og public gør at du kan tilgå funktionerne uden for objektet.

dvs.

$obj = new Obj();
$obj->foo();

Hvis den var private eller protected kunne du ikke tilgå den udfra, men kun som $this->foo(); inde i selve objektet.

Prøv at lære Java eller C++, så er det nemmere at se meningen, da det er påkrævet at sproget :)
Avatar billede coderdk Praktikant
05. maj 2005 - 16:50 #5
private gør at du ikke kan tilgå den udefra; den er privat for klassen :)
Avatar billede coderdk Praktikant
05. maj 2005 - 16:51 #6
Ikke engang nedarvede objekter kan tilgå den, skal nedarvede kunne tilgå den, men ikke udefra, bruger man "protected"...
Avatar billede dulius Nybegynder
05. maj 2005 - 16:52 #7
hyberprocessor:
det er også den løsning jeg selv har brugt indtil videre, men jeg synes ikke det er ret optimalt at lave en ny db-forbindelse i hver class hvis man nu bare kan bruge den forbindelse der allerede er oprettet i config.php

wicez:
private er så variablen KUN kan tilgås af funktioner fra classen. Public der kan man tilgå variablen direkte.

Se dette link: http://dk2.php.net/manual/en/language.oop5.visibility.php
Desuden så ser det ikke ud til at den løsning du skrev til mig virker? Men jeg prøver lige lidt mere... testede bare lige hurtigt
Avatar billede hyberpreprocessor Nybegynder
05. maj 2005 - 16:54 #8
dulius, er det mysqli som kræver det ?

Normal mysql_query() kræver jo ikke connection statementen for at kunne bruges.
Avatar billede Slettet bruger
05. maj 2005 - 16:54 #9
Jeg forstod det allerede første gang hyperpreprocessor skrev det :o)
men tak da
Avatar billede dulius Nybegynder
05. maj 2005 - 16:56 #10
hyberprocessor jeg bruger den objekt orienterede mysqli, så for at kunne bruge det skal jeg lave noget i stil med $db->query("SELECT ... blabalbal"); - derfor skal jeg jo have tilgang til en instans af et mysqliobjekt. Og det er det som ik gider funke! :)
Avatar billede hyberpreprocessor Nybegynder
05. maj 2005 - 17:03 #11
hmm, ja. Jeg kunne heller ikke få PEAR::DB til at virke ordenligt så jeg opgav :)
Jeg trækker mig ihvertfald, så må vi se om nogle andre kan løse det.
Avatar billede dulius Nybegynder
05. maj 2005 - 17:06 #12
Jeg har fået det til at virke! - Wicez' løsning virkede, jeg havde bare lige lavet lidt rod!

Tak for hjælpen, hvis du opretter et svar wices så får du points.

mvh. Julius
Avatar billede Slettet bruger
05. maj 2005 - 17:47 #13
Selv tak :o)
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