Cześć,
W projekcie opartym na cms potrzebuję utworzyć kilka klas dziedziczących po klasie z frameworka.
Każda z nowo utworzonych klas będzie posiadała wspólny zestaw metod.
Metody te będą korzystały z pola, które jest zdefiniowane w trait, użytym w bazowej klasie cms (klasa, którą chcę rozszerzyć).
Mogę to osiągnąć na trzy sposoby.
Która z opcji jest najlepsza i dlaczego?
- Utworzenie dodatkowej klasy w hierarchii, która zawiera wymagane funkcje.
Odwołanie do pola z trait użytego w klasie bazowej jest możliwe, dzięki jego wykorzystaniu w klasie z której dziedziczymy.
Legenda:
A - klasa główna [CMS]
B - klasa bazowa, dziedzicząca po A [CMS]
X - trait, który jest używany w klasie B [CMS]
C - dodatkowa klasa w hierarchii, której działanie jest opisane w tytule tego punktu
D, E, F - klasy dziedziczące po klasie C
W trait X mamy zdefiniowane pole, dzięki czemu w klasie C mogę użyć tego pola w nowo dodanej metodzie a następnie wywołać tą funkcję w pochodnych klasach (D, E i F).
- Stworzenie traita, który przechowuje potrzebne funkcje.
Zostanie on użyty w każdej z klas dziedziczących po bazowej klasie.
Odwołanie do pola z trait użytego w klasie bazowej jest możliwe, dzięki wcześniejszemu zdefiniowaniu tego pola w tymże trait.
Legenda:
A - klasa główna [CMS]
B - klasa bazowa, dziedzicząca po A [CMS]
X - trait, który jest używany w klasie B [CMS]
C, D, E - klasy dziedziczące po klasie B
Y - trait, którego działanie jest opisane w tytule tego punktu
W trait Y odwołuję się do pola z trait X w nowo dodanej metodzie a następnie wywołuję tą funkcję w klasach, w których trait został użyty (C, D i E).
- Ostatnim pomysłem jest utworzenie nowego traita, który dziedziczy po trait z cms.
Na koniec wykorzystuję rozszerzonego traita w nowo dodanych klas (czyli coś podobnego jak w pkt. 2).