Avatar billede berglund Nybegynder
18. april 2002 - 11:36 Der er 8 kommentarer

Variabler og funktioner inden i classes

Hej Eksperter, kan I mon hjælpe en knap så erfaren PHP-programmør?

Det drejer sig om følgende princip:

class store {
  var $a;
  function plus_en() {
  $this->a++;
  print "plus en: ".$this->a;
  }
  function minus_en(){
  $this->a--;
  print "minus en: ".$this->a;
  }
  function action(){
    function setvar() {

      # hvorfor referer denne varable IKKE til 
      # class'ens $a?
      # hvad skal jeg kalde den for at den kommer til
      # at referere til den rigtige variabel?

      $this->a=15;
    }
    $this->a=10;
    setvar();
    $this->plus_en();
    $this->minus_en();
  }
}
$myStore = new store;
$myStore->action();
}

Jeg vil blive meget glad hvis I kunne svare på spørgsmålet, eller komme med en anden løsning på problemet.

Det er ikke en anden løsning at flytte "setvar" et niveau op. Funktionen SKAL være placeret inden i action().

Tusind tak!
Avatar billede delwin Nybegynder
18. april 2002 - 11:39 #1
functions in functions.. fy fy.. den går ikke..

Kommer aldrig til at virke..
Avatar billede berglund Nybegynder
18. april 2002 - 11:41 #2
Gælder det generelt eller er det kun forbud i classes?
Avatar billede delwin Nybegynder
18. april 2002 - 11:49 #3
Du kan godt gøre det.. men det er noget rodet noget..

+ Du skal huske at den function du har lavet inden i, først eksisterer efter at den yderste er blevet kaldt..
Avatar billede berglund Nybegynder
18. april 2002 - 11:52 #4
Det er klart! Det er hele pointen!
Det som jeg ikke forstår er, hvorfor $this->a ikke referer til samme variabel om classens $a.
Avatar billede berglund Nybegynder
18. april 2002 - 11:57 #5
... til samme variabel SOM classens $a.
Avatar billede erikjacobsen Ekspert
18. april 2002 - 12:08 #6
Skidt nu med det. Det er nok en ret dum idé at putte en funktion ind
i en anden funktion. Prøv at kalde din $myStore->action(); to gange.
Så får du i andet kald at vide, at setvar() er erklæret to gange.

Der tror jeg ikke du kan leve med.

Hvorfor SKAL den være lokal ?

(PHP har et meget simpelt OO-apparat - forvent ikke for meget)
Avatar billede berglund Nybegynder
18. april 2002 - 12:13 #7
Den skal være lokal fordi jeg skal bruge følgende funktioner, og de vil ikke acceptere at startElement og endElement ikke ligger i samme "niveau".

- xml_set_element_handler($xml_parser, "startElement","endElement");
- xml_set_character_data_handler($xml_parser, "getElementContent");

Jeg må vist acceptere at jeg ikke kan lave en class ud af det. Desværre. Det ville have været rart at jeg ikke skulle have en hel masse globalt definerede variabler.
Avatar billede erikjacobsen Ekspert
18. april 2002 - 12:18 #8
Det er da vist også det de anbefaler - er det ikke ?

Der er kun for 25 øre OO i PHP - desværre - måske i PHP 5 - eller PHP 17
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