Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][OOP] extends
Forum PHP.pl > Forum > Przedszkole
Spirit86
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
Crozin
"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.
Spirit86
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
Crozin
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.
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.