![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam taki kod:
Wszystko jest ok aż do ostatniej linijki kodu - echo $Node->Hello(); Wynik skryptu: Hello! World. test1 Fatal error: Call to undefined method DOMElement::Hello() in D:\WebServ\httpd-users\test\index.php on line 17 Czy istnieje jakieś rozwiązanie aby obiekt $Node = new MyClass() po przypisaniu $NodeList->item(0); był nadal obiektem klasy MyClass? ![]() Przez to cała robota mi stanęła...proszę o pomoc ![]() Ten post edytował morris4life 30.11.2009, 11:31:00 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Chyba nie czaisz jak działa dziedzicznie.
class MyClass extends DOMNode powoduje, ze klasa MyClass dziedziczy po klasie DOMNode a nie na odwrót TO dziala:
Gdyż $node to obiekt klasy MyClass To nie dziala
Gdyż $node to obiekt klasy DOM i nie ma nic wspólnego z MyClass -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
nospor
"Gdyż $node to obiekt klasy DOM i nie ma nic wspólnego z MyClass" no to chyba nie całkiem do końca jest tak jak piszesz, ponieważ
jest właśnie klasy DOMNode a moja MyClass to faktycznie rozszerzona klasa DOMNode. temat nadal otwarty [font="Tahoma"][/font] |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat nospor Pokazany palcem a ten nadal nie kuma...."Gdyż $node to obiekt klasy DOM i nie ma nic wspólnego z MyClass" no to chyba nie całkiem do końca jest tak jak piszesz, ponieważ [PHP] pobierz, plaintext $Node = $NodeList->item(0); jest właśnie klasy DOMNode Cytat jest właśnie klasy DOMNode No wlasnie, jest klasy DOMNode i nie ma nic wspolnego z MyClass!To MyClass dziedziczy po DOMNode a nie na odwrót. Jak masz coś co jest DOMNode to to cos nie ma dostępu do MyClass. Jak masz cos co jest MyClass to ma to dostęp do DOMNode, gdyż MyClass dziedziczy po DOMNode. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
ok nie zrozumiałem .. zwracam honor
![]() czyli nie da rady zrobić tego tak jak np w Delphi, gdzie mogę sobie zadeklarować w funkcji zmienną var Node = TMyClass, potem podstawić pod nią wynik jakiejś funkcji, która zwraca wynik typu DOMNode i nadal odwoływać się do metod Node typu TMyClass? |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
morris4life -> to, że sobie rozszerzysz jakąś klasę, nie znaczy, że wszystkie jej obiekty automatycznie stają się od razu dziećmi tej klasy. I nawiasem mówiąc, gdzie tu masz jakiś polimorfizm?
Kod class a { /* jakiś kod */ } class b extends a { /* jakiś kod */ public method foo(){ } } $foo = new b; // obiekt klasy B dziedziczącej po A $foo->foo(); // zadziała, bo to obiekt klasy B $bar = new a; // obiekt klasy A $bar->foo(); // nie zadziała, bo to obiekt klasy A Jeśli DOMDocument tworzy obiekty DOMNode, to są to obiekty DOMNode i koniec, kropka, a nie żadne MyClass. Na koniec zagwozdka dla Twojego sposobu myślenia: Kod class ClassA extends DOMNode { } class ClassB extends DOMNode { } // i niby czym teraz miałyby być Twoje obiekty, gdyby było prawdą to, co piszesz? Natomiast sytuacja, o której piszesz w Delphi jest karygodna! Jeśli stworzyłeś jakiś obiekt WYŁĄCZNIE jako obiekt klasy A, to NIE WOLNO go używać jako obiektu klasy B, nawet jeśli ona dziedziczy po A! A co, gdyby klasa B miała jakieś dodatkowe pola? Z obiektem wiąże się przecież pewien obszar pamięci. Na obiekty klasy A przewidziane jest 50 bajtów, na obiekty B - 80 bajtów. Teraz rzutujesz obiekt klasy A na "B", odwołujesz się do dodatkowego pola i co? Wychodzisz poza pamięć przyznaną obiektowi... gratulacje. Ten post edytował Zyx 30.11.2009, 12:03:58 -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
przecież jeżeli:
to poprzez $Node mogę odwołać się zarówno do metod klasy MyClass oraz DOMNode np nodeValue - czy się mylę? oraz dlaczego przypisanie
ma zamienić $Node w DOMNode, a nie pozostanie MyClass - przecież ja tu nie wywołuję kontruktora żadnej klasy? W PHP dopiero raczkuję dlatego proszę o wyjaśnienie? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Konstruktory dziedziczą się samoczynnie. Deklarujesz go tylko wówczas, kiedy chcesz dopisać nowy kod do konstruktora.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Natomiast sytuacja, o której piszesz w Delphi jest karygodna! Jeśli stworzyłeś jakiś obiekt WYŁĄCZNIE jako obiekt klasy A, to NIE WOLNO go używać jako obiektu klasy B, nawet jeśli ona dziedziczy po A! A co, gdyby klasa B miała jakieś dodatkowe pola? Z obiektem wiąże się przecież pewien obszar pamięci. Na obiekty klasy A przewidziane jest 50 bajtów, na obiekty B - 80 bajtów. Teraz rzutujesz obiekt klasy A na "B", odwołujesz się do dodatkowego pola i co? Wychodzisz poza pamięć przyznaną obiektowi... gratulacje. Przecież nie można rzutować klasy A na klasę B ponieważ dostaniesz AV (A nie dziedziczy z B ) - co najwyżej B możesz rzutować na A ponieważ to B dziedziczy z A! Co do odpowiedzi phpion to jest oczywiste, ale czy jest jakiś sposób aby przypisać właściwości obiektu A do B ale nie zamieniając A w B tylko niech pozostanie A? Ten post edytował morris4life 30.11.2009, 12:29:57 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat czy jest jakiś sposób aby przypisać właściwości obiektu A do B ale nie zamieniając A w B tylko niech pozostanie A? Kompozycja, można w klasie B zawrzeć obiekt klasy A, np.
Ten post edytował darko 30.11.2009, 12:36:58 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Można w klasie B agregować obiekt klasy A, np. czyli że jezeli bedę chciał aby
to w klasie Z będę musiał agregować wszystkie poprzednie klasy żeby mieć dostęp do ich metod? Ten post edytował morris4life 30.11.2009, 12:39:41 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy dobrze Cię rozumiem: używasz kompozycji dla tylko jednej klasy, najbardziej wyprowadzonej (klasa Z), która dziedziczy metody z klas nadrzędnych.
Ten post edytował darko 30.11.2009, 12:42:19 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 04:03 |