Włączanie plików + autoloader, chętnie bym posłuchał ciekawych pomysłów |
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 |
7.03.2005, 17:09:23
Post
#41
|
|
Grupa: Zarejestrowani Postów: 105 Pomógł: 0 Dołączył: 16.10.2004 Ostrzeżenie: (0%) |
Cytat(Vengeance @ 2005-03-07 15:07:14) A czy są szybsze od zserializowanej tablicy, zapisanej w pliku ? Jeśli to nie jest pytanie retoryczne, to: Nie. -------------------- Com powiedział, powiedziałem.
|
|
|
7.03.2005, 17:19:21
Post
#42
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) |
@Bora: Pliki ini moze i sa wczytywane szybciej, ale zamiana %APP_DIR% na odpowiednia sciezke niestety zepsuje tutaj wydajnosc.
|
|
|
7.03.2005, 22:59:24
Post
#43
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%) |
witam ...
a moze w ini zrobic 2 sekcje ... Kod [path] app_dir = "./jakis/dir/" trans_dir = "./jakis/dir" jakis_dir = "./jakis/dir" [clases] class = file_name class = file_name class = file_name i potem parse ini ze znacznikiem true i mamy sklejanie stringow ...
i nie trzeba nic zamieniac ... i da sie latwo konfigurowac w tym samym ini ... pozdrawiam -------------------- Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
|
|
|
8.03.2005, 00:10:53
Post
#44
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) |
A w jaki sposob z gory okreslisz, ktora sciezke masz dokleic do konkretnej klasy? Nie zrobisz tego, chyba ze narzucisz sobie jakies bardzo scisle reguly, a tego wole uniknac.
|
|
|
8.03.2005, 08:01:25
Post
#45
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) |
A ja mam jeszcze pytanie dot. __autoload(). Czy jeśli wywołam w niej statyczną metodę która w razie niepowodzenia wywala wyjątek, to trzeb go obsłużyć w __autoload() czy przejdzie poziom wyżej?
Przykład:
Czy 1 sposób też może być? Czy wyjątek zostanie obsłużony? -------------------- |
|
|
8.03.2005, 20:18:36
Post
#46
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%) |
Cytat(hawk @ 2005-03-08 00:10:53) A w jaki sposob z gory okreslisz, ktora sciezke masz dokleic do konkretnej klasy? Nie zrobisz tego, chyba ze narzucisz sobie jakies bardzo scisle reguly, a tego wole uniknac. witam .. no przeciez normalnie ... Kod [path] mainAppPath = '/home/user/public_hmtl/site/' mainImagesPath = '/home/user/public_hmtl/site/images/' cos tam cos tam default = 'clases/' [clases] dbclass = 'clases/db.class.php' session = 'clases/session.class.php' mail = '3rdpart/clases/mail/mail.class.php' ;z defaultem dbclass = 'db.class.php' session = 'session.class.php' i potem:
w sekcji clases tez moga byc sciezki podane, przeciez to lokalizacja pliku a nie nazwa klasy ... czyli dajesz najpierw najbardziej ogolna a potem w poszczegolnych klasach dodajesz, podkatalogi ... mozna na sztywno dodac default do kodu strony a jak cos sie zmieni [ale znowu bez przesady ... tak czesto sie nie zmienia i klasy i tak sa w 1 miejscu] to zmienic albo nawet wyzerowac default pozdrawiam -------------------- Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
|
|
|
9.03.2005, 03:16:17
Post
#47
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) |
@Orson: nie o to mi chodzi. Masz np. (a raczej użytkownik systemu ma) Smarty, kawałek WACT i w ogóle przynajmniej kilka bibliotek, których używa. Przecież nie będzie tak, że jeden super framework robi wszystko najlepiej, więc autoloader nie powinien być ograniczony do tego, co sami sobie wymyślimy, tylko po prostu działać tak jak chce użytkownik.
Nie powiesz teraz użytkownikowi, że ma to wszystko umieścić w innym katalogu. Będzie miał Smarty w jakimś niestandardowym miejscu, będzie chciał użyć razem z super-autoloaderem i będzie oczekiwał, że autoloader załaduje mu Smarty - od tego przecież jest. I co wtedy? Skąd autoloader ma wiedzieć, że Smarty akurat nie jest pod mainAppPath? PS Cytat ...mozna na sztywno dodac default do kodu strony a jak cos sie zmieni... Nie można. Autoloader jest po to, żeby tego kodu w ogóle nie było. Nie ma gdzie dodawać defaulta. |
|
|
9.03.2005, 07:31:00
Post
#48
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%) |
witam ...
hmm ... no to w pliku ini w sekcji clases podajesz Kod [clases] smarty = /full/path/to/smarty/lib/smarty.php a zeby bylo latwiej mozna np. wprowadzic ifa przy ladowaniu i np. jak nazwa klasy zaczyna sie od 2 // a nie od 1 to laduj bez patha .... czyli jak dopiszemy // przed smarty to oleje sekcje path i biblioteka moze byc gdziekolwiek ... rozwiazanie z plikiem ini coraz bardziej mi sie podoba ... chyba zaczne go stosowac ... pozdrawiam -------------------- Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
|
|
|
9.03.2005, 10:25:30
Post
#49
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) |
@Nievinny: wyrzuc wyjatek w tej metodzie i sprawdz. Wyjatek wedruje w gore do ekranu (error) dopuki go nie zlapiesz gdzies po drodze.
-------------------- Nie lubię jednorożców.
|
|
|
9.03.2005, 17:20:55
Post
#50
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) |
Owszem wywala wyjątek, ale nie obsługuje go w zwykły sposób, a skrypt wychwytuje wyjątek "po drodze", tylko wywala fatal errora.
@dr_bonzo: To co mówisz byłoby dobre, gdyby funkcję wywoływać w ten sposób:
A nie jeśli zostaje ona wykonana automatycznie... :/ Zostaje obsługa błędów na poziomie funkcji. Jeśli obsługujemy przez funkcję to pojawiają się problemy: 1) Jeśli klasą którą ładuje system jest klasa obsługi błędów?
Znajdą się też inne problemy... :/ Macie jakieś pomysły jak ładnie obsłużyć ten wyjątek? -------------------- |
|
|
12.03.2005, 23:12:26
Post
#51
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) |
Rozwiązanie z generowaniem mapy przez skanowanie katalogów wydaje się najlepsze. Jednak sposób Vengeance'a nie jest zbyt efektywny. Wymaga wczytania zawartości każdego pliku z osobna i sprawdzania, czy zawiera on jakieś klasy. Może jest to bardziej elastyczne, gdy mamy po kilka klas w jednym pliku, ale ja to zrobiłem inaczej.
U mnie każda klasa jest w osobnym pliku. Nazwa pliku zawierającego definicję klasy lub interfejsu kończy się na .class.php lub interface.php. I tylko takie pliki są ładowany do mapy. Wycinki kodu z mojego frameworka:
Porównanie szybkości (dla stosunkowo małej liczby plików): - czytanie mapy z generowaniem: 35,67 ms - czytanie z cache'owanej mapy: 00,57 ms Kod Vengeance'a: - czytanie mapy z generowaniem: 129.35 ms A czytanie z cache wygląda identycznie Ten post edytował chmolu 13.03.2005, 12:41:45 |
|
|
13.03.2005, 01:10:23
Post
#52
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
chmolu: Zauważ, że to Ty trzymasz każdą klasę w innym pliku!
A jak byś chciał dodać do frameworka np. AdoDB, Smarty czy inne rzeczy? One nie stosują twojego nazewnictwa. Po to właśnie ten mój* skrypt przeszukuje wszystkie pliki wczytując je! Skoro twoje nazewnictwo jest tak ustandaryzowane to w jakim celu w ogóle tworzyć mape ? przecież wystarczy zrobić require $className . '.class.php'; hehe * przypominam, iż nie czuje się właścicielem skryptu posklejałem kod z wielu wypowiedzi innych osób i wrzuciłem -------------------- |
|
|
13.03.2005, 09:44:36
Post
#53
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) |
@Vengeance: to prawda, nie każdy musi trzymać każdą klasę w innym pliku. Dla mnie takie rozwiązanie jest najwygodniejsze.
Cytat A jak byś chciał dodać do frameworka np. AdoDB, Smarty czy inne rzeczy? One nie stosują twojego nazewnictwa. Autoloader u mnie ma służyć tylko do ładowania klas należących do jądra i aplikacji. Biblioteki typu Smarty i AdoDB zaliczam do "zewnętrznych" części aplikacji, którymi zająć musi się odpowiednia akcja/widok. Poza tym zauważ, że w przypadku tych bibliotek musimy włączyć tylko jeden główny plik, który już sam zajmuje się potrzebnymi mu plikami. (btw: główny plik Smarty ma nazwę Smarty.class.php, więc pasuje do mojego nazewnictwa ) Cytat Skoro twoje nazewnictwo jest tak ustandaryzowane to w jakim celu w ogóle tworzyć mape ? przecież wystarczy zrobić require $className . '.class.php'; hehe Ale dzięki mapie struktura katalogów jest dowolna. Mogę sobie w dowolny sposób podzielić na różne katalogi i podkatalogi, a gdy zajdzie potrzeba zmiany struktury wystarczy tylko wygenerowac mapę i nie trzeba grzebać w kodzie i poprawiać wszystkich ścieżek. Ten post edytował chmolu 13.03.2005, 09:52:28 |
|
|
13.03.2005, 10:44:30
Post
#54
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) |
@chmolu a jak zmienisz ścieżke do smarty ?
-------------------- |
|
|
13.03.2005, 12:43:09
Post
#55
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) |
Nie używam Smarty więc nie ma żadnego problemu
// btw: poprawiłem troszkę ten kod Ten post edytował chmolu 13.03.2005, 12:43:29 |
|
|
13.03.2005, 13:43:28
Post
#56
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
@chmolu: ty nie. Ale z tego co wynika z twoich wypowiedzi to co piszesz
to framework. Pewnie kiedys ktos inny z niego bedzie korzystac i moze chciec takze korzystac ze smarty -------------------- |
|
|
13.03.2005, 13:55:45
Post
#57
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) |
Zapewniam cię, że nie będzie to żaden problem
Ale mam nadzieję, że zamiast Smarty ludzie będą używali systemu wbudowanego w mój framework (wzorowany na WACT/ASP/JSP). Jak skończę, to zarzucę tu kod do oceny. Ten post edytował chmolu 13.03.2005, 13:57:45 |
|
|
4.05.2005, 18:16:29
Post
#58
|
|
Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków |
Pozwole sobie odkopać temat
Zastanawiam się czy nie użyć pliku xml ładowania klas. Coś na wzór:
Potem bardzo prosto: simplexml, loader instacji (w moim przypadku) i tyle Iść dalej tym tropem, czy zacząć myśleć nad czymś innym ? |
|
|
5.05.2005, 00:09:50
Post
#59
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 10.10.2002 Ostrzeżenie: (0%) |
Tylko właściwie... po co XML do zwykłego przypisania nazwy pliku do nazwy klasy? IMO jest to lekkie komplikowanie sobie całej sprawy - no chyba, że chcemy przechowywać jakieś dodatkowe informacje.
Mnie osobiście podoba się pomysł z iteratorem, szukającym klas po wszystkich plikach o określonym wzorcu, w podanej ścieżce (ścieżkach). Można z tego zrobić ładną tablicę, zserializować ją i do pliku... Co prawda trzeba się troszkę pobawić samym pisaniem tego generatora mapy, ale za to później, przy zmianie położenia/nazw plików zaoszczędzi się duużo czasu. -------------------- | WinXP | Apache 2.0.50 | php 5.0.3 | MySQL 4.0.20 | Zend Studio |
CMS::engine llllllllllllllllllll 80% CMS::userInterface |
|
|
5.05.2005, 06:37:45
Post
#60
|
|
Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) |
Ja to widzę tak:
1. Crowler, szuka po określonych folderach w poszukiwaniu plików php zawierających klasy. Będzie miał możliwość wyszukiwania z filtrowaniem nazw plików, nazwach klas itp. Być może po dodaniu opcji filtracji czas generowania mapy się zwiększy nieco, ale na jakoże jest to czynność wykonywana rzadko, można sobie na to pozwolić. 2. Dodatkowy plik XML z klasami zewnętrznymi. W tym pliku będą zapisane w postaci XML dodatkowe klasy, które autoloader ma obsługiwać. Plik byłby parsowany i razem z wynikami crowlera zapisywany w pliku php w postaci tablicy. |
|
|
Wersja Lo-Fi | Aktualny czas: 26.09.2024 - 13:53 |