Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kopiowanie danych obiektu rodzica do obiektu dziecka
Forum PHP.pl > Forum > PHP > Object-oriented programming
starach
Niech kod przemówi za mnie. tongue.gif
  1. <?php
  2. class Rodzic
  3. {
  4.    private $_zmienna_1;
  5.    private $_zmienna_2;
  6.    public function setZm1($val) { $this->_zmienna_1 = $val; }
  7.    public function setZm2($val) { $this->_zmienna_2 = $val; }
  8.    public function getZm1() { return $this->_zmienna_1; }
  9.    public function getZm2() { return $this->_zmienna_2; }
  10. }
  11. class Dziecko extends Rodzic
  12. {
  13.    public function potrzebnaOperacja()
  14.    {
  15.        echo "{$this->getZm1()} {$this->getZm2()}";
  16.    }
  17. }
  18.  
  19. $rodzic = new Rodzic();
  20. $rodzic->setZm1('Hello');
  21. $rodzic->setZm2('World');
  22.  
  23. $dziecko = new Dziecko();
  24. ?>
Czy jest jakiś automatyczny sposób na przekazanie wartości z klasy Rodzic do klasy Dziecko, czy muszę ręcznie pisać wywołania setterów i getterów?
dr_bonzo
Ze co chcesz zrobic?

Sproboj dac modyfikatory protected do zmiennych.
piaseq
@ orgleee
Nie jestem pewny czy dobrze Cię zrozumiałem, ale:
- po pierwsze tak jak napisał dr_bonzo jeżeli właściwości klasy Rodzic mają modyfikator private nie są dziedziczone przez klasę dziecko. Jeżeli chcesz aby klasa dziecko dziedziczyła te właściwości musisz zmienić te modyfikatory na protected.

- po drugie chyba pomyliłeś klasę z jej instancją. Załóżmy, że $_zmienna_1 i $_zmienna_2 mają modyfikator dostępu protected. Wykonując

  1. <?php
  2. $rodzic = new Rodzic();
  3. ?>

tworzysz obiekt (instancję) klasy rodzic, więc

  1. <?php
  2. $rodzic->setZm1('Hello');
  3.  $rodzic->setZm2('World');
  4. ?>

ustawia wartość właściwości obiektu $rodzic nie klasy Rodzic. Wywołanie

  1. <?php
  2. $dziecko = new Dziecko();
  3. ?>

(zakładając, że $_zmienna_1 i $_zmienna_2 mają dostęp protected) spowoduje utworzenie obiektu klasy Dziecko. Właściwości $_zmienna_1 i $_zmienna_2 nie będą miały w tym momencie żadnej wartości, ponieważ nie zostały zainicjowane w definicji kalsy Rodzic.

Według mnie są dwie metody wyjścia z tej sytuacji:
- możesz zmodyfikować klasę Rodzic

  1. <?php
  2. protected $_zmienna_1 = 'Hello';
  3. protected $_zmienna_2 = 'World';
  4. ?>

Po takiej modyfikacji każdy nowo utworzony obiekt klasy Rodzic lub Dziecko będzie posiadał właściwości $_zmienna _1 i $_zmienna_2 z wartościami jak powyżej.

- jeżeli nie chcesz inicjować wartości $_zmienna_1 i $_zmienna_2 w definicji klasy zmień tylko modyfikator na protected, a następnie użyj setterów.

  1. <?php
  2. $rodzic = new Rodzic();
  3. $rodzic->setZm1('Hello');
  4. $rodzic->setZm2('World');
  5.  
  6. $dziecko = new Dziecko();
  7. $dziecko->setZm1($rodzic->getZm1);
  8. $dziecko->setZm2($rodzic->getZm2);
  9. ?>


Tak ja to widzę, ale ponieważ nie uważam się za eksperta w dziedzinie obiektowości być może jest coś o czym nie wiem i znajdzie się ktoś kto poda inne rozwiązanie.
dr_bonzo
@piaseq: aaa, nie zauwazylem new Dziecko();

@orgle: zmienne instancji (private $costam) naleza do obiektu, a nie klasy. Czyli kazdy new Rodzic(), new Klasa() ma swoje zmienne ktore sa od siebie NIEZALEZNE.

Napisz co chcesz osiagnac bo twoj kod jest nie jasny i nie przedstawia tego celu.
starach
Cytat
Czy jest jakiś automatyczny sposób na przekazanie wartości z klasy Rodzic do klasy Dziecko, czy muszę ręcznie pisać wywołania setterów i getterów?
Mam obiekt klasy rodzic. Musze ponownie wykorzystać dane tylko w innym celu. Chce się dowiedzieć czy jest automatyczny sposób kopiowania danych między obiektami, czy wszystko muszę robić ręcznie. "$dziecko->setZm_1($rodzic->getZm_1());". No Chyba prościej wyjaśnić się już nie da. rolleyes.gif
piaseq
Cytat(orglee @ 17.01.2009, 12:52:35 ) *
Chce się dowiedzieć czy jest automatyczny sposób kopiowania danych między obiektami, czy wszystko muszę robić ręcznie.


Z tego co wiem (jak pisałem wcześniej nie jestem ekspertem OOP) jeżeli te obiekty są instancjami różnych (nawet jeżeli jedna dziedziczy po drugiej) klas nie ma innej metody niż ręczne przypisanie.
starach
Cytat(Crozin @ 17.01.2009, 13:04:51 ) *
Ale tak czy siak musiałbym pisać implementacje metody magicznej. Chciałem się dowiedzieć czy jest jakiś rodzaj rzutowania spokrewnionych zmiennych które są obiektami.
Cytat
Z tego co wiem (jak pisałem wcześniej nie jestem ekspertem OOP) jeżeli te obiekty są instancjami różnych (nawet jeżeli jedna dziedziczy po drugiej) klas nie ma innej metody niż ręczne przypisanie.
Dziękuję o to chodziło.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.