Avatar billede webcreator Nybegynder
25. december 2005 - 04:01 Der er 5 kommentarer og
1 løsning

PHP5 - variabler og referencer

Hej Eksperter.

Jeg sidder og bøvler med et irriterende problem i PHP5 - specielt fordi alle de bøger jeg kan finde synes at gøre det på samme måde som jeg. Koden nedenfor virker ikke. Den giver fejlen:

Notice: Undefined variable: page in /var/www/templating/page.php on line 11
Fatal error: Cannot access empty property in /var/www/templating/page.php on line 11

Hvis jeg så fjerner '$this->' foran mine referencer til variablen på klassen, så får jeg i stedet denne fejl:

Notice: Undefined variable: page in /var/www/templating/page.php on line 23

Det virker meget underligt - om jeg bruger $this-> eller ej burde overhovedet ikke spille nogen rolle. Og hvorfor i alverden får jeg fejl hvis jeg forsøger at give en variabel en værdi? Jeg burde kun få en sådan fejl hvis jeg bruger en variabel der ikke er blevet initialiseret endnu.

---------------------------------------------------------------------------------

<?php

class Page
{
    var $page;

    public function Page($template)
    {
        if (file_exists($template))
        {
            $this->$page = file_get_contents($template);
        }
        else
        {
            die("Template file $template does not exist!");
        }
    }
   
    public function ReplaceTags($tags)
    {
        foreach ($tags as $tag => $data)
        {
            $this->$page = str_replace("{".$tag."}", $data, $this->$page);
        }
    }
   
    public function Output()
    {
        echo $this->$page;
    }
}

?>
Avatar billede tjp Mester
25. december 2005 - 06:29 #1
Kunne det ikke skyldes '$' foran 'page' i ' $this->$page'?
Prøv med  '$this->page' i stedet.
Avatar billede webcreator Nybegynder
25. december 2005 - 14:16 #2
Super, det var da det! Men jeg finder det nu lidt mærkeligt at der ikke skal være $ foran variabel-navnet. Hvordan kan det være? Hvornår gælder at man refererer til variabler uden $ ?
Avatar billede tjp Mester
26. december 2005 - 01:55 #3
Fordi 'objektnavn->variabelnavn' er måde man refererer til objektvariabler (og -metoder for den sags skyld) på. Pseudovariablen 'this' er objektets navn, set indefra, og bruges til at refererer til egne medlemmer, da det af gode grunde ikke har kendskab til sine kommende navne på definitionstidspunktet.
Avatar billede webcreator Nybegynder
26. december 2005 - 01:57 #4
Det er jeg klar over - det er det manglende $ på variabel-navnet jeg studser lidt over.
Avatar billede Slettet bruger
29. december 2005 - 15:10 #5
Prøv med dette i din Output()

$kaj='page';
echo $this->$kaj;
Avatar billede webcreator Nybegynder
05. marts 2006 - 13:38 #6
Takker
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