Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Moduły aplikacji jako obiekty
Forum PHP.pl > Forum > Przedszkole
SmokAnalog
Witajcie,

napisałem sobie aplikację bota do komunikatorów. Ma wiele modułów, każdy jest zapisany w osobnym pliku. Na chwilę obecną są to tablice - każdy plik zwraca tablicę, która jest przechwytywana przez require. Chcę jednak bardziej elegancko pogrupować wspólne funkcjonalności w klasy, tak by każdy moduł był obiektem. Pytanie teraz jak to najładniej można osiągnąć?

  1. Mogę wszystkie parametry zawrzeć w konstruktorze i zwrócić obiekt, jednak nie podoba mi się takie podejście.
  2. Mogę też użyć zmiennej, podziałać na niej i zwrócić obiekt na zasadzie:
    1. $module = new XxxModule;
    2. $module->addYyy('Zzz');
    3. return $module;
  3. Jeszcze inną metodą jest rejestracja modułów specjalną metodą, na zasadzie:
    1. $module = new XxxModule;
    2. $module->addYyy('Zzz');
    3. $module->register();

Jak to się najczęściej robi w poważnych projektach? smile.gif
Crozin
1. Moduły raczej będą składać się z wielu obiektów, wiec Twój mechanizm powinien operować na nieco szerszym kontekście.
2. http://symfony.com/doc/current/quick_tour/...e-bundle-system - zapewne takie cos Cie interesuje.
SmokAnalog
Dzięki. Chwilę po napisaniu posta doszło do mnie, że wolę mieć każdy moduł jako osobną klasę dziedziczącą po typie modułu, żeby użyć interfejsów.

Kiedyś widziałem takie rozwiązanie w plikach z modułem jako klasą:
  1. class ModuleLion extends ModuleAnimal {...}
  2.  
  3. return new ModuleLion;


Czyli każdy plik modułu zwracał obiekt. Jest jakiś inny sposób na dynamiczne utworzenie instancji na podstawie pliku, w którym jest tylko klasa? Tak, żeby nie używać nazwy klasy dwukrotnie w tym samym pliku.
vermis
Autoload
Tworzysz obiekt, a plik automatycznie jest dołączany.
SmokAnalog
No fajnie, tylko ciekawe skąd bot ma wiedzieć o istnieniu tej klasy tongue.gif One są ładowane dynamicznie z folderu i nie używam nigdzie ich nazw klas, są zupełnie niezależne od siebie.
vermis
Leszym rozwiązaniem jest rejestrowanie/instalowanie modułu i ładowanie tylko zarejestrowanych, a nie dynamiczne ładowanie wszystkiego co jest w katalogu. Jak pojawi się tam niepożądany plik to może wysypać całą aplikację.
SmokAnalog
To prawda, ale ja lubię osobiście to podeście. Nie wiem jak się fachowo nazywa, ja je nazywam przypinaniem.

A wracając do mojego pytania, da się automatycznie utworzyć obiekt z definicji klasy? Przyszło mi na myśl jeszcze, że mogę bazować na nazwie pliku, bo i tak mam w zwyczaju nazywać plik tak jak nazywa się klasa. Jeśli nic lepszego nie wymyślimy, to tak zrobię.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.