![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Witam. Jestem w trakcie projektowania swojego pierwszego poważnego framweworka którego mam zamiar używać w swoich aplikacjach. Struktura katalogów i plików jest identyczna jak w ZF czyli:
aplication - controllers - models - views library public Zastanawia mnie jak wykonać w takim systemie tzw. autoload? Myślałem nad stworzeniem dodatkowego kontrolera który przejmował by za mnie ten problem. Działało by to w to w ten sposób:
Loader ładował by potrzebny plik z odpowiednią klasą i zwracał jej obiekt. Jak wy rozwiązujecie taki problem ? Psuje kod, miało być: $myClass = loader::getInstance('aplication_models_myClass'); Ten post edytował wlamywacz 21.09.2008, 16:08:33 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 17 Dołączył: 23.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ja kiedyś rozwiązałem ten problem w taki sposób:
Storzyłem sobie klasę Loader, która w konstruktorze wywoływała funkcję spl_autoload_register. Klasa zaraz po utworzeniu obiektu, sprawdzała czy we wskazanej lokalizacji znajduje się plik z cachem. Jeśli cache się znajdował, to wczytywał go, a w cache'u była zserializowana tablica, której kluczem była nazwa klasy, a wartością ścieżka do pliku z klasą. W klasie (Loader) istniała metoda, przy której użyciu można było dodawać ścieżki z katalogami do klas, metoda ta przeszukiwała rekurencyjnie wskazany katalog w poszukiwaniu plików. Generalnie szukała na podstawie takiego schematu nazwy pliku: class.nazwa_klasy.php dla klasy, oraz interface.nazwa_interfejsu.php dla interfejsu. Na tej podstawie tworzyła się tablica o schemacie, o którym wspomniałem wyżej. W destruktorze zawartość tablicy z klasami była serializowana i zapisywana do pliku (cache, o którym mowa wyżej). Istniała również metoda, dzięki której mogłem dodać sobie ręcznie jakąś klasę, np. coś z biblioteki PEAR. Do metody tej dostarczałem więc nazwę klasy oraz ścieżkę do klasy. Proponuję również, dla zachowania pewnej zgodności wstecznej (a mianowicie, jeśli brakuje nam spl_autoload), do klasy Loader wstawić metodę, która po przekazaniu tylko i wyłącznie nazwy klasy, ładowałaby nam odpowiedni plik. Nię muszę chyba tłumaczyć, że wygodniejsze jest wklepanie "Loader::load('nazwa_klasy');" niż "require_once '/sciezka/do/klasy/class.nazwa_klasy.php';". To tyle (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 12:58 |