Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przypisywanie właściwości jednego obiektu na inny
morris4life
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 31.05.2008

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
pp-layouts
post
Post #2





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 28.09.2007
Skąd: Gdynia

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


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?

Go to the top of the page
+Quote Post
darko
post
Post #3





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
morris4life
post
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 31.05.2008

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


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).
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 11:45