Avatar billede Mikker Praktikant
13. juni 2005 - 16:03 Der er 8 kommentarer og
1 løsning

Hvordan laver jeg et globalt object i PHP 5 ?

Hej Eksperter

Jeg har lavet en klasse 'db' med funktionen 'query'. I en header-fil opretter jeg et object: $oDB = new db();

Hvordan gør jeg objektet $oDB globalt så jeg kan kalde funktionen 'query' fra funktioner i andre klasser?
Avatar billede drbean Nybegynder
13. juni 2005 - 16:52 #1
Det er meget simpelt:
$oDB = new db();
$GLOBALS['oDB'] = $oDB;
Avatar billede Mikker Praktikant
13. juni 2005 - 17:00 #2
Det virker ikke.
Når jeg efterfølgende kalder $oDB->query($sql); får jeg flg. fejl:

Notice: Undefined variable: oDB in ...

Fatal error: Call to a member function query() on a non-object in ...
Avatar billede Mikker Praktikant
13. juni 2005 - 17:01 #3
Hvis jeg tilføjer en GLOBAL $oDB; inde i funktionen, så virker det, men det vil jeg jo gerne være fri for.
Avatar billede drbean Nybegynder
16. juni 2005 - 11:32 #4
Så er jeg tilbage. Har desværre været på kursus i denne uge. Prøv at lave en kontruktør på din klasse. På følende:

private $oDB;
function __construct()
{
$this->oDB = $GLOBALS['oDB'];   
}

Det kode bruger jeg selv, det skulle meget gerne virke.

Ellers kan du gøre sådan her:
$GLOBALS['oDB']->query($sQuery);

Mener det skyldes sikkerheds opsætningen i PHP5.
Avatar billede Mikker Praktikant
17. juni 2005 - 09:46 #5
Det første eksempel kan da umuligt virke da $GLOBAL['oDB'] ikke eksistere:
Undefined index: oDB

Det andet eksempel virker, men måske er det mere korrekt OOP at oprette et objekt af klassen db i de klasser hvor jeg skal bruge objektet db og dets metoder?
Avatar billede drbean Nybegynder
17. juni 2005 - 11:10 #6
Du skal selvfølgelig oprette objektet først:
$oDB = new db();
$GLOBALS['oDB'] = $oDB;

Bagefter kan du lave dette lille nr. hvor du sætter dit objekt ind i klassen
private $oDB;
function __construct()
{
$this->oDB = $GLOBALS['oDB'];   
}
Avatar billede Mikker Praktikant
28. november 2006 - 11:30 #7
Lukker
Avatar billede drbean Nybegynder
28. november 2006 - 12:33 #8
hvad, fik du det til at virke?
Avatar billede Mikker Praktikant
28. november 2006 - 12:36 #9
Det kan jeg faktisk ikke huske - det er jo trods alt et halvt år gammelt spørgsmål.
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