Wszystko jest mojego własnego pomysłu, od razu zaznaczam - jest tworzony w PHP, ale struktura jest na tyle prosta, że tyczy się jakichkolwiek obiektowych języków programowania. W skrócie, mam sobie trzy klasy: Dysk, Folder oraz Plik. Uproszczona ich struktura wygląda tak:
class Dysk {
private $name;
}
class Folder extends Dysk {
private $parent;
}
class Plik extends Folder {
private $type;
private $content;
}
Obiekty klasy Plik oraz Folder posiadają pola $parent, które odwołują się do innych istniejących obiektów, tworząc hierarchię. W teorii nie powinno dać się umieścić w $parent obiektu klasy Plik (tylko Dysk i Folder są dopuszczalne), ale nie bardzo wiem jak to zrobić. Podobnie nie powinno być możliwości odwoływania się do samego siebie oraz zapętlania, ale to na potem.
$dysk = new Dysk('Dysk C');
$folder1 = new Folder($dysk,'Folder nr 1');
$folder2 = new Folder($folder1,'Podfolder');
// dozwolone
$plik1 = new Plik($folder2,'Plik1','grafika');
// nie powinno być dozwolone
$plik2 = new Plik($plik1,'Plik 2','muzyka');
Pytania:
1. Jak mogę sprawić, aby można było w $parent odwoływać się tylko do obiektów klasy Disk i Folder, ale już nie File? Jakiś try/catch czy może jakieś słowo kluczowe PHP które wyrzuciłoby jeden z wbudowanych błędów?
2. Jeżeli chciałbym potem wyświetlić w jakiś sposób takie drzewo, to jak mam "pozbierać" wszystkie obiekty? Umieścić je w tablicy, a potem jakąś funkcją łączyć na podstawie $parent?