Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kopiowanie danych obiektu rodzica do obiektu dziecka, Czy jest jakiś prosty sposób?
starach
post 17.01.2009, 00:32:49
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
dr_bonzo
post 17.01.2009, 02:56:33
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Ze co chcesz zrobic?

Sproboj dac modyfikatory protected do zmiennych.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
piaseq
post 17.01.2009, 11:58:35
Post #3





Grupa: Zarejestrowani
Postów: 161
Pomógł: 25
Dołączył: 6.09.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@ 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.
Go to the top of the page
+Quote Post
dr_bonzo
post 17.01.2009, 12:39:23
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


@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.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
starach
post 17.01.2009, 12:52:35
Post #5





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


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

Ten post edytował orglee 17.01.2009, 12:53:55
Go to the top of the page
+Quote Post
Crozin
post 17.01.2009, 13:04:51
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


clone" title="Zobacz w manualu PHP" target="_manual?
Go to the top of the page
+Quote Post
piaseq
post 17.01.2009, 13:07:00
Post #7





Grupa: Zarejestrowani
Postów: 161
Pomógł: 25
Dołączył: 6.09.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
starach
post 17.01.2009, 13:09:31
Post #8





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:03