Avatar billede dennism Nybegynder
18. oktober 2006 - 13:33 Der er 13 kommentarer og
1 løsning

PHP: problem med klasse

Jeg har et PHP-dokument som indeholder en klasse. I denne klasse har jeg en funktion, i hvilken jeg forsøger at hente en variabel som er defineret udenfor klassen. Men det kan åbenbart ikke lade sig gøre?

Lad mig illustrere det på denne måde:

$settings['color'] = "e0e0e0";

class newsletter{

    function printColor() {
        return "farven er: ".$settings['color'];
    }

}

Når jeg kører funktionen printColor bliver farven ikke udskrevet. Hvad er problemet? har forsøgt at lave den global, men synes ikke det virker.
Avatar billede Slettet bruger
18. oktober 2006 - 13:46 #1
Løsningen kan måske findes i at farven ikke udskrevet men returneret. Hvis det ikke er tilfældet, hvordan kalder du så funktionen?
Avatar billede drbean Nybegynder
18. oktober 2006 - 14:07 #2
du kan ikke hente en variable ind i en klasse uden den er definere i klassen. (med mindre den er global)

det kunne gøres sådan her:
class newsletter{
    var $color;

    function setColor($Color)
    {
        $this->color = $Color;
    }
 

    function printColor() {
        return "farven er: ".$settings['color'];
    }
}

så skal du blot sætte farven inde du hiver den ud
Avatar billede drbean Nybegynder
18. oktober 2006 - 14:07 #3
sry, så skal den sidste funktion se sådan her ud:
function printColor() {
        return "farven er: ".$this->color;
    }
Avatar billede dennism Nybegynder
18. oktober 2006 - 14:09 #4
$classNewsletter = new newsletter();
echo $classNewsletter->printColor();

Dette giver ingen ting som return :(
Avatar billede dennism Nybegynder
18. oktober 2006 - 14:11 #5
drbean >>

Jeg har et array (settings) som indeholder alle mine settings (sjovt nok)..det ville naturligvis være frustrerende, hvis jeg skulle have en variabel i klassen til hver af disse settings. Derfor vil jeg gerne have gjort den global, men det synes jeg heller ikke jeg kan få til at virke?
Hvor skal den erklæres global? I klassen eller i funktionen? Synes ikke nogen af delene virker.
Avatar billede drbean Nybegynder
18. oktober 2006 - 14:18 #6
når du sætter den prøv så at sætte den sådan her:
$GLOBALS['settings']['color'] = "e0e0e0";

og hent den ud sådan her:
function printColor() {
        return "farven er: ".$GLOBALS['settings']['color'];
    }
Avatar billede dennism Nybegynder
18. oktober 2006 - 14:30 #7
Det ser ud til at fungere nu. Kan det passe, at man også skal sætte en "global $settings" i funktion?
Avatar billede drbean Nybegynder
18. oktober 2006 - 14:35 #8
Hvad mener du med at sætte? jeg henter den ud i funktionen via $GLOBALS['settings']['color'];

det skulle meget gerne være nok.
Avatar billede dennism Nybegynder
18. oktober 2006 - 17:13 #9
Oki, så har jeg måske misforstået dig?

Jeg har gjort det, at når jeg skal tildele min værdi til $settings['color'], så bruger jeg:
$GLOBALS['settings']['color'] = "en farve";

Men for at jeg så i min funktion i klassen kan få lov til at hente farven med $settings['color'] er jeg nødt til først at skrive "global $settings;"
Avatar billede dennism Nybegynder
18. oktober 2006 - 19:29 #10
HVad siger du til det? :)
Avatar billede drbean Nybegynder
18. oktober 2006 - 19:35 #11
hmm.... jeg ville hente den i klassen på denne måde: $GLOBALS['settings']['color'] det andet tror jeg ikke virker.

Hvis du vil bruge den måde, skal du i starten af din funktion gøre sådan her:

$settings = $GLOBALS['settings'];
Avatar billede dennism Nybegynder
28. oktober 2006 - 19:45 #12
Tak for hjælpen her. Smider du lige et svar?
Avatar billede drbean Nybegynder
28. oktober 2006 - 20:10 #13
samler ikke på point. Behold dem selv. Og selv tak
Avatar billede dennism Nybegynder
28. oktober 2006 - 20:21 #14
.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