Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odwołanie do własności, która jest obiektem (ściślej: do JEJ własności :D)
Forum PHP.pl > Forum > PHP > Object-oriented programming
ravenshade
Bracia i Siostry w obiektowym PHP, pomóżcie :-)

Przełączam się ze strukturalnego PHP na obiektowy i mam problem z wywoływaniem metod, których właścicielami są obiekty będące własnościami innych obiektów. Przeszukałem forum, poszperałem w sieci, ale odpowiedzi nie znajduję (nie wykluczam, że po prostu mój pomysł do drapanie lewą ręką w prawe ucho i dlatego nie widzę rozwiązań...) Żeby wyjaśnić:

Moje zadanie polega na tym, aby stworzyć sobie klasę World, która składa się ze swego rodzaju tablic dwuwymiarowych, pełniących funkcję "warstw" (jak na mapie cyfrowej). Tablice te powinny być osobnymi klasami (bo inne metody są dla warstwy "typu" A, a inne - dla warstwy "typu" B ).Wykoncypowałem sobie, że potrzebna mi będzie najpierw klasa Pole, z której dziedziczyć będą "warstwy" różnego typu (np. inny będzie sposób wyświetlania).

Napisałem sobie klasę Pole, mniej więcej taką:

  1. class Pole {
  2. public function show() {...} // tu jest implementacja funkcji show, która pokazuje jak warstwa wygląda
  3. {...} // inne metody i własności, m.in. tablica, gdzie trzymane są dane, save i load do pliku etc.
  4. };


Teraz tworzę sobie klasę LayerA, która dziedziczy po Pole, ale ma inny sposób wyświetlania (są też podobne klasy LayerB, LayerC itd. różniące się metodą show).


  1. class LayerA extends Pole {
  2. public function show() {...} // tu jest implementacja funkcji show, specyficzna dla warstw klasy A (mapy typu A)
  3. };



Teraz buduję klasę World, która powinna składać się z kilku obiektów klasy LayerA i podobnych (w konstruktorze odpowiednie obiekty tworzy)

  1. class World {
  2. public $geologia;
  3. public $wody;
  4. public function __construct() {
  5. $geologia = new LayerA(); $geologia->loadfile("layer_g.txt");
  6. $wody = new LayerB(); $wody->loadfile("layer_w.txt");
  7. }
  8. };


Problem zaczyna się w momencie tworzenia programu głównego. Jak wywołać metodę obiektu będącego własnością klasy World. Poniższy kod nie działa:

  1. $n = new World();
  2. $n->geologia->show();


Gdzie popełniam błąd?

Z góry dzięki za pomoc - i wszystkim Wesołych Świąt! I dużo zdrowych obiektów w Nowym Roku!

Ravenshade
nospor
nie: $geologia = new LayerA();
a: $this->geologia = new LayerA();
Analogicznie reszta. Przydaloby sie najpierw zapoznac z podstawami obiektowki
ravenshade
Cytat(nospor @ 23.12.2010, 12:32:41 ) *
nie: $geologia = new LayerA();
a: $this->geologia = new LayerA();
Analogicznie reszta. Przydaloby sie najpierw zapoznac z podstawami obiektowki


Dzięki, pomogło :-)

Przepraszam za kłopot, rzeczywiście idiotyczny błąd. Po prostu jestem jeszcze nieprzyzwyczajony do obowiązku stosowania $this->

pozdrawiam,
RS
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.