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
Imperior
post
Post #2





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.10.2004

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


Cytat(hawk @ 2005-02-18 13:39:33)
Dwie słabe strony tu widzę:

1) Wszystko musi siedzieć w 2 miejscach: NN_LIB i NN_PRIVATE, co utrudnia model działania typu "user ściąga pakiet, wrzuca gdzie mu się podoba i chce żeby to działało".

2) Nie da się tego połączyć z zewnętrznymi bibliotekami, tzn takimi, gdzie nie ty decydujesz o nazwach klas.

ad 1. NN_LIB jest podrzędne do NN_PRIVATE. W NN_LIB są trzymane właśnie pakiety, dla mnie nie do pomyślenia jest coś takiego, że user wrzuca jakiś pakiet gdzie mu się żywnie podoba, zamiast tego jest Instalator, przez którego może ściągnąć pakiet, uploadować, wskazać na serwerze i na podstawie plików konfiguracyjnych w pakiecie wszystko jest pięknie i ładnie instalowane razem z weryfikacją zależności.

ad 2. Z pozoru... Jeśli pliki będą w NN_LIB to zostaną załadowane, jedynie musi być spełniony warunek, żeby nie miały '_' w nazwach... (a jeśli tak, to żeby były prawidłowo umieszczone, ale wtedy probelmu nie ma (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) )

Ciekawe z tymi mapami... a gdyby rozszerzyć je o jakieś wyrażenia regularne?
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
3 Użytkowników czyta ten temat (3 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 08:34