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ą:
class Pole { public function show() {...} // tu jest implementacja funkcji show, która pokazuje jak warstwa wygląda {...} // inne metody i własności, m.in. tablica, gdzie trzymane są dane, save i load do pliku etc. };
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).
class LayerA extends Pole { public function show() {...} // tu jest implementacja funkcji show, specyficzna dla warstw klasy A (mapy typu A) };
Teraz buduję klasę World, która powinna składać się z kilku obiektów klasy LayerA i podobnych (w konstruktorze odpowiednie obiekty tworzy)
class World { public $geologia; public $wody; public function __construct() { $geologia = new LayerA(); $geologia->loadfile("layer_g.txt"); $wody = new LayerB(); $wody->loadfile("layer_w.txt"); } };
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:
$n = new World(); $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