Avatar billede moddi100 Seniormester
27. december 2008 - 15:02 Der er 9 kommentarer og
1 løsning

Bruge eksisterende object inde i funktion

Hej

Jeg har en class kaldet Main

class Main
{
  var Variabel = "Variabel her";
 
  function Hej()
  {
    echo $this->Variabel;
  }
}

Så kunne jeg godt tænke mig at kalde Main->Hej() inde fra en anden funktion. Objectet er bare oprettet uden for den anden funktion, er det på nogen måde muligt?

function KaldMain()
{
  $Main->Hej(); // ???
}

$Main = new Main();
Avatar billede moddi100 Seniormester
27. december 2008 - 15:05 #1
Jeg ønsker altså ikke, at lave et nyt object i funktionen KaldMain().
Main::Hej() kan heller ikke bruges, da det er et krav, at det er objectet $Main der bruges.
Avatar billede micc Nybegynder
27. december 2008 - 15:51 #2
function KaldMain($obj)
{
$obj->Hej();
}

$Main = new Main();

KaldMain($Main);
Avatar billede moddi100 Seniormester
27. december 2008 - 17:26 #3
Det virker ikke hvis du laver følgende:

function KaldMain($obj)
{
$obj->Variabel = "Noget andet...";
$obj->Hej(); // Udskriver "Noget andet..."
}

$Main = new Main();
KaldMain($Main);

$Main->Hej(); // Udskriver "Variabel her"
Avatar billede moddi100 Seniormester
27. december 2008 - 17:30 #4
Prøvede jo så lige at skrive

function KaldMain(&$obj)

men første gang jeg gjorde det, virkede det ikke. Så jeg fjernede det igen. Så gik jeg ind på php.net, læste lidt, og skrev nøjagtig det samme igen. Denne gang virkede det... :D

Læg et svar, hvis du ønsker point
Avatar billede moddi100 Seniormester
27. december 2008 - 17:35 #5
Kan godt lave en workaround med ovenstående, men findes der en måde, hvorpå, man kan gøre det på, uden at skulle angive objectet når man kalder functionen?
Avatar billede micc Nybegynder
27. december 2008 - 18:15 #6
Mener du at du vil undgå at sende objektet til funktionen som parameter? Så kan du godt gøre det således:

function KaldMain()
{
global $Main;
$Main->Hej();
}

$Main = new Main();

KaldMain();

Men i så fald kunne du vel ligeså godt bare direkte skrive:
$Main->Hej();
Avatar billede moddi100 Seniormester
27. december 2008 - 18:30 #7
Det har jeg skam også prøvet, masser af gange :D

Men har dog fundet ud af hvorfor det ikke virker. Kan dog bedst beskrive hvad jeg gør, ved at vise det (forsimplet):

Class Main()
{
  var $Var = "Dav";

  function Main() // Construktor
  {
      KaldMain();
  }
  function Hej()
  {
      echo $this->Var;
  }
}

function KaldMain()
{
  Global $Main;
  $Main->Hej();
}

$Main = new Main();

Jeg prøver altså at bruge main, endnu inden objectet er blevet konstrueret.
Avatar billede moddi100 Seniormester
27. december 2008 - 18:31 #8
Men tak for din hjælp til at komme frem til denne konklussion.
Avatar billede micc Nybegynder
27. december 2008 - 19:14 #9
Det virker umiddelbart som en nyttesløs omvej. Er der noget i vejen med bare at bruge følgende?:

Class Main()
{
  var $Var = "Dav";

  function Main() // Construktor
  {
      $this->Hej();
  }
  function Hej()
  {
      echo $this->Var;
  }
}

$Main = new Main();
Avatar billede moddi100 Seniormester
27. december 2008 - 19:25 #10
Lad mig forklare lidt mere om mit system:

Main() er det grundlæggende i det system jeg er ved at bygge. Det indeholder diverse funktioner.

Så har jeg en class der hedder Error. Når der så opstår en 'fejl' eller lign. oprettes et nyt object af Error-classen. Inde i Error-classens constructor kunne jeg så godt tænke mig at føje den pågældende 'fejl' til et array i Main()-classen.
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