<?php abstract class Punkt { private $x; private $y; private $type; public function setX($x) {.......} public function getX() {.......} public function setY($y) {.......} public function getY() {.......} . . . } ?>
I to jest klasa główna, wszystkie punkty będą miały te cechy($x,$y, $type)
Będą punkty które posiadają tylko te cechy np:
<?php class StandardowyPunkt extends Punkt { } ?>
i tutaj nie ma problemu.
Ale będą punkty które będą posiadały dodatkowe cechy np wysokośc, kolor, obrazek, zależnie od użytego grafu(mam różne typy grafów).
<?php class RozszezonyPunkt extends Punkt { private $wysokosc; private $color; private $obrazek; public function set*() { .... } public function get*() { .... } } ?>
I podczas użycia odpowiedniego grafu wybieram odpowiedni opis punktu np
<?php class GrafGalileusza extends Graf { public function __construct($file, $classPunkt) { //Prasuj plik $file.XML do zmiennej $graf if (!class_exists($classPunkt)) throw new Exception(....); //Sprawdź czy klasa dziedziczy po Punkcie $Test = new $classPunkt (); if (($Test instanceof 'Punkt') === false) throw new Exception(...); foreach($graf as $coords => $v) { //$coords jest typu(X:Y) $this -> graf[$x][$y] => new $classPunkt(); $this -> graf[$x][$y] -> setWysokosc(); $this -> graf[$x][$y] -> setColor(); $this -> graf[$x][$y] -> set*(); ... } } } ?>
Pytanie mam właśnie do tego momętu:
Gdy ktoś poda jako $classPunkt klasę StandardowyPunkt a klasa GrafGalileusza musi używać klasy RozszezonyPunkt, to wystąpi błąd.
Co zrobić w takiej sytuacji?
Sam się strasznie gmatwam z tym.
Myślałem, żeby zrobić jedną klasę Punkt i do niej dodawać wszystkie cechy punktu które będe używał, lub ktoś sobie doda gdy będzie potrzebował innej cechy.
<?php final class Punkt { private $x; private $y; private $type; private $wysokosc; private $color; private $obrazek; . . . } ?>
Tylko czy tutaj użytkownik nie ma za wielkiej swobody?
Co możecie mi polecić?
Chyba, że na stałe ustalać w klasie GrafGalileusza jaka klasa punktu ma być używana i np zrobic PunktGalileusza
<?php class GrafStandardowy extends Graf { private $opisPunktu = 'StandardowyPunkt'; } ?>
<?php class GrafGalileusza extends Graf { private $opisPunktu = 'RozszeżonyPunkt'; } ?>
<?php class GrafOli extends Graf { private $opisPunktu = 'PunktOli'; } ?>
Pytania pogrubiłem.
Proszę o odpowiedź i dziękuje.