Avatar billede jalle76 Nybegynder
19. maj 2003 - 13:26 Der er 1 kommentar og
1 løsning

Kalde en funktion på en instans af et objekt i et andet objekt.

class one {
  var array1;
  function one() {
    $this->array1 = array();
  }
  function add_to_array($item) {
    array_push($this->array1, $item);
  }
}

class two {
  function two {}
  function stuff($instans_one) {
    $instans_one->add_to_array("slam");
  }
}

$instans_one = new one();
$instans_two = new two();
$instans_two->stuff($instans_one);

Hvorfor kan man ikke gøre ovenstående? PHP melder ingen fejl, men hvis man skriver indholdet af array1 ud efter ->stuff() kaldet ligger der ikke noget i arrayet.
Avatar billede niboan Nybegynder
19. maj 2003 - 14:54 #1
PHP overfører som default værdier (pass by value) ved funktionskald, og det objekt du kalder 'add_to_array' på er ikke det samme som du har overført, men en kopi.

Du skal bruge 'pass by reference' ved at tilføje et '&' foran variablen i funktionsdeklarationen:

  function stuff(&$instans_one) {

Så skulle det virke.
Avatar billede jalle76 Nybegynder
19. maj 2003 - 15:53 #2
Det kan jeg li'! Ikke at jeg havde glemt det med pass-by-value vs. pass-by-reference. Men et kort og godt svar der dutter.

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