Avatar billede lillebror Nybegynder
16. august 2004 - 17:01 Der er 4 kommentarer og
1 løsning

Læse variabel oprettet i en class

Vi starter med lidt kode:

class xsetter(){
function xsetter(){
  echo"hej";
}

function doThis($header=0){
  if($header == 1){
  $x = "test";
  } else {
  echo $x;
  }
}
}

Først kalder jeg den her klasse i header, $loader = new xsetter(); $loader->doThis(1);
så nu bliver $x = "test";

Senere kalder jeg igen klassen i body, $loader = new xsetter(); $loader->doThis();

nu bliver $x ikke vist, hvad skal jeg gøre for at få lov til at kunne echo $x;

Der må ikke ændres på den måde jeg kalder klassen på.
Avatar billede dennismp Nybegynder
16. august 2004 - 17:17 #1
Hvorfor er du nød til at initialiserer $xsetter to gange? Jeg tror ikke (med php4) du kan lave en statisk variable som de kan dele.

Du kan jo lave dit objekt som en singleton og så bare lade $x være en almindelig klasse-variable.

http://www.phppatterns.com/index.php/article/articleview/6/1/1/
Avatar billede lillebror Nybegynder
16. august 2004 - 17:26 #2
Det der singleton forstod jeg ikke meget af :)

Jeg initialiserer to gange, fordi jeg kalder den en gang i header og en gang i body, det kunne måske godt have været lavet anderledes, men nu er jeg efterhånden kommet langt på den her måde, også ville jeg være ked af at skulle kode det hele om.

Det kan være jeg bare er nødt til at tænke alternativt.

Smid gerne et svar, fordi du tog dig tid til at svare på et håbløst problem :)
Avatar billede dennismp Nybegynder
16. august 2004 - 17:31 #3
Hvorfor kan du ikke bare forsætte med at bruge $loader ?

Singleton betyder bare, at du max kan have een objekt af en given klasse..

alternativ kan du lave en lille funktion som denne:

function get_xsetter() {
    static  $obj = null;

    if( $obj === null )
      $obj = new xsetter();

    return &$obj;
}

så burde du kunne skrive

$loader = get_xsetter();
$loader->doThis(1);

$loader = get_xsetter();
$loader->doThis();

Det er ikke et håbløst problem - vi skal bare have fundet en løsning :)
Avatar billede lillebror Nybegynder
16. august 2004 - 17:36 #4
Jeg gjorde som følger:
jeg tilføjede $x i doThis, doThis($header=0,$x).
ydermere lavede jeg $x = "test"; om til $this->x = "test";
efter jeg havde kørt den header oprettede jeg $x = $loader->x;

og da jeg så skulle køre den i body kørte jeg den som $loader->doThis(0,$x)

det virkede :)
Avatar billede jakoba Nybegynder
16. august 2004 - 17:45 #5
$varnavn_der_kun_maa_bruges_af_klassen_xsetter = null;

class xsetter(){
  var x = "varnavn_der_kun_maa_bruges_af_klassen_xsetter";
  function xsetter(){
    echo "hej";
  }
  function doThis($header=0){
    if($header == 1){
      ${this->x} = "test";
    } else {
      echo ${this->x};
    }
  }
}
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