Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

> Włączanie plików + autoloader, chętnie bym posłuchał ciekawych pomysłów
hawk
post
Post #1





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Problem stary jak świat: system wymaga włączenia sporej liczby plików i zarządzanie tym jest upierdliwe. Do tego nie należy włączać więcej kodu niż potrzeba, a najlepiej zrobić jakieś lazy load.

Oczywiście, technik jest wiele:

1) require_once rozsiane po plikach, najlepiej poprzedzone jakąś stałą, np. require_once ROOT_DIR . '/foo/Foo.class.php';

2) Prado: deklarujemy namespacy - np. za pomocą funkcji using(), co dodaje nam ścieżki do include_path, a potem niech php znajdzie klasę.

3) Autoloader + mapa (nazwa klasy => ścieżka do pliku); autoloader wczytuje mapę i na jej podstawie jest w stanie znaleźć każdą klasę

Są jeszcze jakieś inteligentne sposoby? Dobry mechanizm powinien być odporny na "przemeblowanie" struktury plików (np. chcemy połączyć kilka klas w jeden plik).

BTW, włączanie plików bez klas (tylko funkcje i kod) jest gorsze, bo nie ma tego czegoś, czego można szukać po plikach... kolejna zaleta OOP? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
hawk
post
Post #2





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat("serafin")
Hawk: Wykorzystales 10 plikow na to co mozna zrobic w jednej klasie (i nie powiedziane ze gorzej).

No dobrze, porozmawiajmy wobec tego konkretnie. Na przykładach. Zaraz zobaczymy, czy rzeczywiście nie gorzej.

1. Chcę włączyć do mapy pliki z katalogów foo/first i foo/second, ale absolutnie nie z foo/third, bo tam są przykłady, które niepotrzebnie zaśmiecałyby mapę.

2. Chcę przeparsować tylko pliki o rozszerzeniu .class.php. Wszystko inne jest niepotrzebne.

3. Chcę, żeby w mojej mapie klasy były posortowane alfabetycznie. Dzięki temu mogę łatwo sprawdzić, jakie klasy są w moim pakiecie, a ponieważ jest to bez różnicy dla przetwarzania, nie ma żadnego powodu, żeby tego nie zrobić. No chyba że narzędzie jest gorsze...

4. Chcę wygenerować mapę dla zewnętrznego pakietu, który inaczej nazywa swoje klasy. Jak narzędzie, to uniwersalne, a nie ograniczone do mojego kodu, prawda? Pakiet jest w zupełnie innym miejscu na dysku.

5. Chcę w wersji produkcyjnej wrzucić kilka klas, które zawsze zawsze są używane, do jednego pliku, żeby przyspieszyć działanie i żeby prościej to wyglądało dla użytkownika końcowego. To częsta praktyka - weźmy np. mojavi.

6. Chcę za pomocą mojego autoloadera wygenerować mapę, która może być od razu wykorzystana w twoim systemie. Czyli plik wygląda tak samo. Chcę mieć uniwersalny autoloader, którego mogą używać inni, a nie nieprzenośne narzędzie.

7. Mam 2 mapy, do 2 różnych pakietów, i chcę obydwie naraz wbić do autoloadera.

Wierzę ci, że można to zrobić w jednej klasie. Która do tego będzie mniejsza niż suma tych plików i w ogóle lepsza. Tylko nie wiem, jak...

A co do tych 10 plików... rozmijasz się z prawdą (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . To są cztery pliki, plus trzy interfejsy (do niczego niepotrzebne, możesz je spokojnie wywalić, ale ja mam do interfejsów sentyment), plus trzy klasy dziedziczące z klas podstawowych (miałem kaprys zrobić coś extra, ale przecież w ogóle nie musisz ich wykorzystywać). Na podobnej zasadzie możemy zacząć liczyć unit testy i pliki readme.

---------------------------------------------
Cytat
OOP ma sens owszem, ale nie w przypadku gdy tworzy sie klasy na 1-3 metod

Wiesz, co to jest Observer? Abstract Factory? Iterator? Registry? Intercepting Filter? Chain of Responsibility? Command? Strategy? Takie różne wzorce projektowe, ale niestety bez sensu, bo mają za mało metod.

Cytat
Oczywiscie ze rozbijanie problemu na mniejsze czescie jest bardzo dobra technika ale sa pewne granice. Czasami mozna kilka z tych czesci polaczyc w jedna wieksza calosc bez szkody dla ostatecznego rozwiazania.

To ty zacząłeś tą dyskusję, więc odpowiedz: dlaczego rozbijanie problemu na mniejsze klasy jest szkodliwe? Bo z tego, co piszesz, wynika, że wg ciebie jest.
Go to the top of the page
+Quote Post

Posty w temacie
- hawk   Włączanie plików + autoloader   10.02.2005, 17:23:52
- - DeyV   Aby sprawę jeszcze bardziej skomplikować - warto p...   10.02.2005, 21:46:51
- - Imperior   Myślę, że moje rozwiązanie pomoże Ci, jeśli wpadni...   11.02.2005, 18:39:48
- - hawk   @Imperior: Dwie słabe strony tu widzę: 1) Wszyst...   18.02.2005, 14:39:33
- - bela_666   Ja mysle, zeby rozwiazac to na podobnej zasadzie j...   18.02.2005, 15:03:36
- - Imperior   Cytat(hawk @ 2005-02-18 13:39:33)Dwie słabe s...   18.02.2005, 20:17:07
- - hawk   @bela_666: Takie rozwiązanie na pewno pasuje do ja...   21.02.2005, 14:43:27
- - hawk   @serafin: Możesz napisać więcej? Mi się zawsze wyd...   25.02.2005, 09:23:01
- - Imperior   Cytat(hawk @ 2005-02-25 08:23:01)Bo problem z...   25.02.2005, 09:55:57
- - Vengeance   A co Wam się stanie gdy zamiast System.Out będzie ...   25.02.2005, 11:42:46
- - hawk   Nic się nie stanie, poza utratą estetyki . Chociaż...   25.02.2005, 12:06:36
- - Vengeance   ale to jest php a nie java Co do autoloadera... ...   25.02.2005, 12:31:22
- - hawk   Co za problem? Sprawdzanie po zrobieniu explode je...   25.02.2005, 12:48:42
- - Seth   Troche to stary kod ale moze sie przyda: [PHP] po...   25.02.2005, 12:50:43
- - bela_666   Seth, a czy te pregi nie spowalniają bardzo przy d...   25.02.2005, 12:55:30
- - Seth   Jakies spowolnienie napewno jest ale za to mozna l...   25.02.2005, 13:07:03
- - bela_666   Cytat(hawk)Podsumowując, idealnie chciałbym mieć: ...   26.02.2005, 00:02:23
- - Nievinny   Jeśli mogę wtrącić trzy grosze, ja myślę, że można...   26.02.2005, 09:35:42
- - hawk   @bela_666: pokaż pokaż pokaż   26.02.2005, 09:55:15
- - Vengeance   Nievinny: jakbyś zrobił cache jakiś to ok. Teraz u...   26.02.2005, 11:55:48
- - bela_666   Cytat(hawk @ 2005-02-26 09:55:15)@bela_666: p...   26.02.2005, 12:21:14
- - Vengeance   Połączyłem kody: bela_666, Nievinny oraz Imperiora...   26.02.2005, 12:36:56
- - Vengeance   Linia nr 9: zmieniasz ją na: Kod if(!i...   26.02.2005, 12:41:48
- - Nievinny   @Vengeance -> Czy twoim zdaniem ładowanie z map...   26.02.2005, 17:03:09
- - Vengeance   Nievinny: chodzi oto, aby mape generować tylko RAZ...   26.02.2005, 17:35:25
- - Nievinny   CytatNievinny: chodzi oto, aby mape generować tylk...   26.02.2005, 17:42:59
- - Vengeance   A po co foreach? Jeszcze opozniac ? To $map[...   26.02.2005, 18:15:03
- - hawk   @Vengeance et al: No, bardzo ładny kod . Ja bym do...   26.02.2005, 18:42:06
- - Vengeance   Ok userzy forum.php.pl "wymyslili" juz i...   26.02.2005, 19:07:38
- - Nievinny   Nazwa: Autoload Class System... może być, a klasa...   27.02.2005, 12:32:23
- - chmolu   Ja to rozwiązałem podobnie, jak w nowym Mojavi: [...   4.03.2005, 10:29:10
- - Nievinny   A ja generujesz listę klas? Tu masz od razu genera...   4.03.2005, 10:52:36
- - chmolu   Lista klas jest w pliku konfiguracyjnym autoload.i...   4.03.2005, 16:34:52
- - hawk   @chmolu: 1) Z tego co pamietam, w __autoload nie m...   4.03.2005, 17:26:32
- - chmolu   Cytat1) Z tego co pamietam, w __autoload nie mozna...   4.03.2005, 17:49:43
- - Nievinny   W sumie, skrypt po raz pierwszy zaczyna działanie ...   4.03.2005, 18:05:53
- - Imperior   Cytat(hawk @ 2005-03-04 16:26:32)1) Z tego co...   5.03.2005, 11:12:31
- - hawk   @chmolu: Faktycznie, obsługa plików ini jest bardz...   7.03.2005, 03:36:42
- - Bora   Pliki ini są wczytywane szybciej niż php gdyż mają...   7.03.2005, 15:06:38
- - Vengeance   A czy są szybsze od zserializowanej tablicy, zapis...   7.03.2005, 16:07:14
- - Imperior   Cytat(Vengeance @ 2005-03-07 15:07:14)A czy s...   7.03.2005, 17:09:23
- - hawk   @Bora: Pliki ini moze i sa wczytywane szybciej, al...   7.03.2005, 17:19:21
- - orson   witam ... a moze w ini zrobic 2 sekcje ... Kod...   7.03.2005, 22:59:24
- - hawk   A w jaki sposob z gory okreslisz, ktora sciezke ma...   8.03.2005, 00:10:53
- - Nievinny   A ja mam jeszcze pytanie dot. __autoload(). Czy je...   8.03.2005, 08:01:25
- - orson   Cytat(hawk @ 2005-03-08 00:10:53)A w jaki spo...   8.03.2005, 20:18:36
- - hawk   @Orson: nie o to mi chodzi. Masz np. (a raczej uży...   9.03.2005, 03:16:17
- - orson   witam ... hmm ... no to w pliku ini w sekcji clas...   9.03.2005, 07:31:00
- - dr_bonzo   @Nievinny: wyrzuc wyjatek w tej metodzie i sprawdz...   9.03.2005, 10:25:30
- - Nievinny   Owszem wywala wyjątek, ale nie obsługuje go w zwyk...   9.03.2005, 17:20:55
- - chmolu   Rozwiązanie z generowaniem mapy przez skanowanie k...   12.03.2005, 23:12:26
- - Vengeance   chmolu: Zauważ, że to Ty trzymasz każdą klasę w in...   13.03.2005, 01:10:23
- - chmolu   @Vengeance: to prawda, nie każdy musi trzymać każd...   13.03.2005, 09:44:36
- - bela_666   @chmolu a jak zmienisz ścieżke do smarty ?   13.03.2005, 10:44:30
- - chmolu   Nie używam Smarty więc nie ma żadnego problemu ...   13.03.2005, 12:43:09
- - Vengeance   @chmolu: ty nie. Ale z tego co wynika z twoich wyp...   13.03.2005, 13:43:28
- - chmolu   Zapewniam cię, że nie będzie to żaden problem A...   13.03.2005, 13:55:45
- - Ociu   Pozwole sobie odkopać temat Zastanawiam się czy ...   4.05.2005, 18:16:29
- - davidD   Tylko właściwie... po co XML do zwykłego przypisan...   5.05.2005, 00:09:50
- - matid   Ja to widzę tak: 1. Crowler, szuka po określonych ...   5.05.2005, 06:37:45
- - Ociu   Cytat(matid @ 2005-05-05 07:37:45)2. Dodatkow...   5.05.2005, 07:22:02
- - chmolu   IMO pliki XML w tym wypadku są niepotrzebne. Szybc...   5.05.2005, 08:24:02
- - Nievinny   XML to przeładowanie, a nam zależy na czasie, nie?...   5.05.2005, 17:06:02
- - matid   Cytat(Nievinny @ 2005-05-05 18:06:02)XML to p...   5.05.2005, 17:55:53
- - bigZbig   @matid -> zauwazylem u Ciebie duze przywiazanie...   10.05.2005, 09:28:27
- - Nievinny   @matid -> ale tą mapę musisz za każdym uruchomn...   10.05.2005, 16:01:11
- - matid   Cytat(Nievinny @ 2005-05-10 17:01:11)@matid -...   10.05.2005, 17:36:31
- - Nievinny   Czyli trzymasz tylko katalogi do parsowania? To ni...   10.05.2005, 18:24:33
- - Ociu   Cytat(matid @ 2005-05-10 18:36:31)Chodzi mi o...   10.05.2005, 19:40:08
- - matid   Cytat(Ociu @ 2005-05-10 20:40:08)Przemyślałem...   10.05.2005, 20:34:10
- - Vengeance   " trwa to ok. 0,4 s" lol :] Mój kod (a ...   10.05.2005, 21:26:35
- - matid   Cytat(Vengeance @ 2005-05-10 22:26:35)" ...   10.05.2005, 21:46:19
- - Ociu   Czepiasz się szczegółów, liczba była podana dla pr...   11.05.2005, 09:08:31
- - Vengeance   To nie było czepianie. Chodziło mi o sposób w jaki...   11.05.2005, 20:45:37
- - matid   Dla zainteresowanych - moja klasa Autoloader: http...   11.05.2005, 21:21:56
- - hawk   Skoro temat zrobił się popularny i każdy chce mieć...   12.05.2005, 09:45:30
- - bigZbig   @hawk -> Amen   12.05.2005, 09:49:20
- - dr_bonzo   ...mam i ja. Stworzylem swojego autoloadera: - w ...   26.05.2005, 15:15:11
- - Vengeance   Z twojego opisu wynika mi, że za każdym uruchomien...   26.05.2005, 18:37:05
- - dr_bonzo   CytatZ twojego opisu wynika mi, że za każdym uruch...   26.05.2005, 19:12:28
- - hawk   Ciekawe rozwiązanie. Faktem jest, że mi by się nie...   27.05.2005, 20:47:33
- - dr_bonzo   W koncu. Kod przepisany od nowa, lecz jeszcze nie ...   5.06.2005, 02:20:39
- - Imperior   dr_bonzo: http://wiki.php.pl/index.php/RecursiveDi...   5.06.2005, 13:02:34
- - hawk   Fajny kod. Nawet zdążyłem już użyć . Kilka uwag: ...   5.06.2005, 13:23:14
- - dr_bonzo   Cytat- nie można podać extension np. "class.p...   5.06.2005, 14:00:34
- - hawk   A co powiecie na taką implementację? [PHP] pobierz...   12.06.2005, 22:16:47
- - cagrET   hawk: widzę, że używasz "notacji węgierskiej...   13.06.2005, 13:24:34
- - hawk   Nie, nie czytałem do tej pory. Przedrostki określa...   13.06.2005, 20:10:13
- - matid   Cytat(hawk @ 2005-06-05 14:23:14)- przydatną ...   13.06.2005, 20:30:28
- - dr_bonzo   cagrET: link do swietnego serwisu. CytatZ jakiegoś...   13.06.2005, 21:03:51
- - hawk   @dr_bonzo i matid: Niestety, phpDocumentor nie ma,...   13.06.2005, 21:51:34
- - matid   Cytat(hawk @ 2005-06-13 22:51:34)@dr_bonzo i ...   13.06.2005, 22:12:12
- - hawk   @matid: Pomysł wręcz genialny w swojej prostocie. ...   16.06.2005, 12:17:19
- - matid   No rzeczywiście, @scope będzie lepsze. Spróbuję to...   16.06.2005, 15:48:55
- - hawk   @serafin: 1) Nikt ci nie broni tworzyć takiej map...   16.06.2005, 18:31:01
- - hawk   Cytat("serafin")Hawk: Wykorzystales 10 p...   16.06.2005, 20:42:41
- - matid   Cytat(serafin)Ma to sens? A dlaczego nie? Mi osobi...   16.06.2005, 22:08:29
- - bela_666   Cytat(matid @ 2005-06-16 23:08:29)Cytat(seraf...   16.06.2005, 22:12:29
- - Imperior   Cytat(matid @ 2005-06-16 21:08:29)Ma ktoś jak...   17.06.2005, 07:20:58
- - matid   Chyba jednak skorzystam z opcji 1, ponieważ zasięg...   17.06.2005, 07:42:50
2 Stron V   1 2 >


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: 11.10.2025 - 21:40