Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][OOP] extends
Spirit86
post 14.09.2010, 12:28:27
Post #1





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


Witam. Napisałem klasę Modules i rozszerzam ją klasą Links.

  1. Class Modules{
  2.  
  3. function __construct(){
  4. $this->InicializeModules();
  5. }
  6. #...
  7. }
  8.  
  9. Class Links extends Modules{
  10.  
  11. function t(){
  12. echo '<a href="adads">asdas</a>';
  13. }
  14.  
  15. }

teraz wywołuję:

  1. $modules = new Modules();
  2. $modules->t();

efekt:
Kod
Fatal error: Call to undefined method Modules::t() in ... on line 49

dlaczego?smile.gif


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Crozin
post 14.09.2010, 12:31:06
Post #2





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

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


"extends" oznacza, że tworzona klasa jest rozszerzeniem/bardziej wyspecializowaną wersją innej, a nie że modyfikowana jest istniejąca już klasa. Innymi słowy: dziedziczenie działa w dół, nie w górę - to w Links masz dostęp do nie-prywatnych elementów klasy nadrzędnej.
Go to the top of the page
+Quote Post
Spirit86
post 14.09.2010, 12:35:47
Post #3





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


Czyli tylko z Links mogę wywołać klasy publiczne z Modules. A jakbym użył parent::addExt(..); np?

chodzi mi o to, że mam klasę Modules w której chce trzymać wszystkie moduły. Czyli np podłaczę klasę Links i chcę, aby ona rozbudowała mi klasę modules, da się to jakoś zrobić, czy innego rozwiązania trzeba szukać?

Dzięki i pozdrawiam


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
Crozin
post 14.09.2010, 12:46:15
Post #4





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

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


Cytat
Czyli tylko z Links mogę wywołać klasy publiczne z Modules.
Publiczne (public) i chronione (protected) - prywatne (private) nie będą dostępne.
Cytat
A jakbym użył parent::addExt(..); np?
Nie mam pojęcia co masz na myśli.

Cytat
chodzi mi o to, że mam klasę Modules w której chce trzymać wszystkie moduły.
W takim razie trzymaj w tym obiekcie referencje do innych obiektów - zrób z niego typową kolekcję.
Cytat
Czyli np podłaczę klasę Links i chcę, aby ona rozbudowała mi klasę modules,
PHP ma "typowy" model obiektowy, tj. oparty jest on na klasach - raz utworzonej klasy nie da się już zmienić - można co najwyżej tworzyć i używać bardziej wyspecjalizowanych typów (np. zamiast Telewizor możesz utworzyć TelewizorLCD, który dziedziczy po pierwszym)

Doczytaj rozdział dot. OOP w manualu, bo brakuje Ci kompletnych podstaw.
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 - 14:06