Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przypisywanie właściwości jednego obiektu na inny
Forum PHP.pl > Forum > PHP > Object-oriented programming
morris4life
Witam ... z góry przepraszam za nowy temat (poprzedni założyłem w ogólnym forum PHP), ale niestety nie rozwiązałem swojego problemu.
Nie wiem czy dobrze opisuję swój problem, otóż:
Czy istnieje możliwość przypisania właściwości obiektu A klasy classA do obiektu B klasy classB, który dziedziczy z classA, ale w taki sposób aby obiekt B nadal posiadał swoje (dodatkowe) właściwości.

Weźmy dla przykładu:

  1. class classA{
  2. public $publicA;
  3. public function helloA(){
  4. return 'Hello A!';
  5. }
  6. }
  7. class classB extends classA{
  8. public function helloB(){
  9. return 'Hello B!';
  10. }
  11. }
  12.  
  13. $A = new classA();
  14. $A -> publicA = 'publicA';
  15.  
  16. $B = new classB();
  17. $B = $A;
  18.  
  19. echo $B->publicA;
  20. echo $B->helloB();
  21. ?>


Problem leży w tym, że w miejscu:

  1. $B = $A


nie chciałbym aby obiekt B był rzutowany, zamieniamy (nie wiem co się w tym momencie dzieje więc sorki) tylko aby przejął właściwości obiektu A, i abym mógł nadal korzystać z właściwości obiektu B jako obiektu klasy classB.

Czy wiadomo o co chodzi? smile.gif
pp-layouts
Jak chcesz rzutować wszystkie właściwości obiektu $A na $B:
  1. foreach ($A as $p => $v) $B->$p = $v;

Jeśli chcesz pobrać z $A i ustawić w $B tylko te właściwości, które już posiada obiekt $B:
  1. foreach ($B as $p => $v) $B->$p = $A->$p;

lub
  1. foreach ($B as $p => &$v) $v = $A->$p;



O to chodziło?

darko
Ale kombinujesz, nie wystarczy tak:

  1. class classA{
  2. public $publicA = "publicA";
  3. public function helloA(){
  4. return 'Hello A!';
  5. }
  6. }
  7. class classB extends classA{
  8. public function helloB(){
  9. return 'Hello B!';
  10. }
  11. }
  12.  
  13. $A = new classA();
  14. $A -> publicA = 'publicA';
  15.  
  16. $B = new classB();
  17.  
  18. //$B = $A;
  19.  
  20. echo $B->publicA;
  21. echo $B->helloB();


questionmark.gif Przecież zamierzony efekt uzyskujesz.
morris4life
pp-layouts dzięki wypróbuje zaraz...

darko
- nie do końca, ponieważ zależy mi na tym aby moja "rozszeżona" klasa posiadała wszystkie wartości właściwości, jej metody swojej klasy rodzica. Konkretnie chodzi mi o utworzenie klasy TTagXML, która dziedzicy z DOMNode, ale moja klasa ma posiadać dodatkowo metodę getTagName, która zwróci mi wartość atrybutu o nazwie NAME danego taga, czyli przykład:

  1. <tag name="tag1" >
  2. <subtag/>
  3. </tag>
  4. <tag name="tag2" >
  5. <subtag/>
  6. </tag>
  7. ...


Czyli -
tworzę obiekt $dom = new DOMDocument();
....
pobieram pierwszy tag, który zapisuję do mojego obiektu i teraz chcę aby mój obiekt poprzez wywołanie metody $A -> getTagName zwrócił mi string "tag1", a zamiast tego gdy podstawiam $A = $NodeList->item(0) to $A automatycznie "zamieniany" jest w obiekt klasy DOMNode, a chciałbym aby tylko przepisały się właściwości DOMNode na obiekt $A (którego klasa i tak de facto dziedziczy po klasie DOMNode).
nospor
Cytat
Witam ... z góry przepraszam za nowy temat (poprzedni założyłem w ogólnym forum PHP), ale niestety nie rozwiązałem swojego problemu.
crossposting na forum jest zabroniony. Jeden problem - jeden temat.
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.