Mianowicie, przykładowo mam strukturę klas korowych:
Core - Messages - Messages.php - Settings - Settings.php
Jako, że w przyszłości nie chciałbym wymuszać zmiany tych klas, chciałbym zaprojektować mechanizm Override.
Każda z tych klas dziedziczyła by po klasach korowych i mógłbym w ten sposób zmieniać ich metody (przeciążać) bez ingerencji w kod korowy.
Custom - Messages - Messages.php - Settings - Settings.php
Nie ma problemu z wczytaniem tych klas ponieważ stosuję schemat PSR-0 i mój autoloader sobie z tym poradzi.
Natomiast problem pojawia się w momencie otrzymania obiektu.
Obiekty są u mnie tworzone w sposób normalny czyli przykładowo:
$object = new \Core\Messages\Messages(); $object2 = new \Core\Settings\Settings(); \Core\Example\ExampleClass::staticMethod();
W rezultacie - ładowana jest zawsze klasa korowa i zawsze zwracany jest jej obiekt.
Chciałbym doprowadzić do momentu w którym ładowany jest obiekt klasy rozszerzającej (gdy ona istnieje) w innym wypadku ładowanie korowej.
Próbowałem już napisać sobie klasę, która zwraca odpowiedni obiekt, taki prosty Loader, który sprawdza czy klasa posiada swój Override.
Jednak jest to trochę uciążliwe podczas pisania, a w szczególności podczas gdy odwołujemy się do klas abstrakcyjnych i ich metod statycznych,
wtedy przykładowo kod musiałby wyglądać tak:
// Jezeli klasa normalna - zwracany obiekt $object = \Service::Core('Klasa\Klasa'); // Jezeli klasa abstrakcyjna zwracana jest przestrzen nazw $namespace = \Service::Core('Abstract\AbstractClass'); $namespace::oneOfStaticMethod();
Czy macie jakieś inne pomysły na rozwiązanie tego problemu ?
Byłbym wdzięczny za każdą wskazówkę