Avatar billede ducks Nybegynder
15. januar 2009 - 07:41 Der er 5 kommentarer og
1 løsning

Flytte data mellem 2 classer

Jeg prøver at flytte et password som bliver oprettet i class account over til class mail. Problemet er bare at jeg ikke kan få dem til at gøre det, uden at man hver gang man laver class mail skal kalde en funktion, det ville være smart, hvis den blev kaldt automatisk når man oprettede class mail. Har lavet et simplificeret eksempel

class account {
  private $password;

  public function __construct() {
    $this->password = 'hemmelig kode';
  }

  public function get_password() {
    global $mail;

    $mail->set_password($this->password);
  }
}

class mail {
  private $password;

  public function __construct() {
    global $account;

    $account->set_password();
  }

  public function set_password($data) {
    $this->password = $data;
  }
}

Nogen forklaring på, hvad der går galt? Det virker fint uden for classerne at flytte koden over ved at skrive $account->get_password(); Bare ikke når de skal kommunikere med hinanden: mail -> account -> mail.
Avatar billede ducks Nybegynder
15. januar 2009 - 07:43 #1
$account->set_password(); skulle selvfølgelig være $account->get_password();
Avatar billede jakobdo Ekspert
15. januar 2009 - 08:28 #2
Hvis den ene skal bruge info fra den anden, kunne du så ikke lave en extends af din account ?

Ala

class mail extends account {
}
Avatar billede ducks Nybegynder
15. januar 2009 - 08:57 #3
Altså omdøbe class mail til class mail extends account? Hvordan skulle det så se ud for at få password'et?
Avatar billede jakobdo Ekspert
15. januar 2009 - 09:12 #4
Man omdøber ikke.
Man nedarver.
Se mere her: http://dk.php.net/extends
Avatar billede kpdk Nybegynder
16. januar 2009 - 00:10 #5
Jeg har lavet et lynhurtigt eksempel som du kan bruge. Det er ikke specielt brugbart på nogen måde og er skrevet meget hurtigt - men det viser hvordan klassen mail nedarver fra account og skifter password et par gange.

<?php
class account {
    private $password;
   
    public function get_password() {
        return $this->password; // bør bestemt sikres!
    }
   
    // nedarvede klasser kan ikke tilgå private variabler, funktioner, etc.
    // skal de kunne det, så angiv dem som public eller protected.
    public function set_password($new_pass) {
        $this->password = $new_pass;
    }
}

class mail extends account {
    public function __construct() {
        // hvad du end har brug for...
    }
   
    public function change_password($string) {
        parent::set_password($string);
    }
}

$m = new mail();

// virker det?
$m->change_password("test123");
echo $m->get_password() . "<br>";

$m->change_password("phptest");
echo $m->get_password();
?>
Avatar billede ducks Nybegynder
11. oktober 2010 - 09:42 #6
lukker
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