Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Moduły aplikacji jako obiekty
SmokAnalog
post
Post #1





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.

Ten post edytował SmokAnalog 4.07.2014, 09:28:25
Go to the top of the page
+Quote Post
vermis
post
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


Autoload
Tworzysz obiekt, a plik automatycznie jest dołączany.


--------------------
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #5





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
vermis
post
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


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ę.


--------------------
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #7





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 08:25