Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%)
|
Witam, ostatnio na własne potrzeby zacząłem pisać coś w czym będę się czuć swobodnie pisząc kolejne aplikacje internetowe, to tak zwany "szkielet".
Uwaga, uwaga, w celu rozwiania pewnych uwag i wątpliwości pojęcie framework zostało objęte cudzysłowiem ponieważ jest to framework po mojemu, jeżeli komuś się nie podoba to nie musi używać i nie, nie będę patrzeć na Zend Framework czy inne frameworki - ten jest inny! Jednak jestem zwolennikiem Wolnego i Otwartego Oprogramowania dlatego postanowiłem, że podzielę się Swoją pracą z innymi ludźmi. Hosting projektu zapewnia github.com, niestety muszę przyznać, że to mój pierwszy projekt hostowany na GIT i mam nadzieję, że nic nie zepsuje po drodzę ( jestem ostrożny ) (IMG:style_emoticons/default/smile.gif) === TU TNIJ === Przejdę do rzeczy, konkrety, konkrety! No i oczywiście dodam link do repozytorium projektu: http://github.com/webnull/OpenWikiBlog Jądro Całość jest zbudowana w oparciu o jądro, a reszta to tylko moduły. Jądro może nie waży zbyt wiele, ale jest na prawdę funkcjonalne. Cechy jądra:
"Module On Demand" Wystarczy odwołać się do modułu który nie został załadowany aby został załadowany (IMG:style_emoticons/default/smile.gif) Kod $Kernel -> module -> moduleFunction ( Arguments ); Powyższy przykład w razie gdy moduł "module" nie istnieje załaduje moduł oraz odwoła się do jego funkcji o zwróci porządaną wartość. Skrypty startowe
Odnośnie skryptów startowych, na wiki jeszcze niema nic opisane ale obiecuję, że wkrótce opiszę każdy szczegół konfiguracji razem z "kolorowymi" przykładami ( gotowcami ) w miarę prosto i zwięźle. Obsługa domyślnych modułów Moduł może zdefiniować Siebie jako domyślny do wykonywania danej czynności, np. moduł MojErrorHandler może wywołać $Kernel->setAsDefault('MojErrorHandler', 'error_handler' ); Po zdefiniowaniu domyślnego modułu np. Error Handlera inne moduły będą go używać w taki sposób: Kod $Kernel->error_handler->log('asd'); "hooking" ( zaczep ) - czyli jak zmodyfikować prywatną zmienną wewnątrz funkcji innej klasy Od niedawna ( dwa ostatnie commity ) dodałem moduł libhooks ( nazwa wywoławcza: hooks ). Moduł pozwala zmodyfikować prywatną zmienną wewnątrz funkcji innego modułu jeżeli ten moduł na to pozwoli. Jak to działa w praktyce? Moduł który chce zmodyfikować dane innego modułu musi być załadowany najpierw. Definiujemy zaczep o nazwie np. "moj_zaczep" podając dodatkowo nazwę klasy i funkcji która ma być wywołana do zmodyfikowania danych przekazanych z zaczepu. Definicji dokonujemy w module który startuje najpierw. Teraz startujemy moduł który posiada dane do zmodyfikowania przez inny moduł, wykonujemy zaczep wrzucając do niego dane które przejmie drugi moduł i zwróci "w poprawionej wersji". Teraz prosty przykład:
Jak powstają nowe funkcje oraz moduły Kernela? Oczywiście buduję własne strony na tym frameworku i jeżeli coś stoi na drodze to poprawiam to lub dodaję nową funkcjonalność i publikuję na bieżąco na githubie. Zawsze jednak jeżeli jesteś chętny/chętna do współpracy to na prawdę zapraszam, z chęcią przejrzę każdą poprawkę i dodam do projektu. Niestety nie posiadam teraz żadnego zewnętrznego hostingu, dlatego strona testowa ( mój warsztat ) nie zawsze jest dostępny, ale wtedy kiedy będzie to zapraszam: http://194.29.181.186/tuxplace-cube/ To jedna ze stron która działa na frameworku. Zapraszam do ocen, oraz do pomocy przy pisaniu kodu (wnoszeniu poprawek jak i funkcjonalności nowej) (IMG:style_emoticons/default/smile.gif) PS. OpenWikiBlog dlatego, że projekt miał być małym mechanizmem podobnym do bloga - jedynie tworzenie i edytowanie podstron HTML razem z panelem administracyjnym ale się rozrosło (IMG:style_emoticons/default/smile.gif) -- WebNuLL Ten post edytował Babcia@Stefa 1.09.2010, 13:31:44 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%)
|
Małe info - poszczególne fragmenty mogą być adresowane do różnych rozmówców.
Ad. referencji -> po pierwsze, używanie referencji do "oszczędzania pamięci" i "zwiększenia wydajności" to jedno wielkie nieporozumienie z takiego prostego powodu, że PHP posiada wbudowany mechanizm leniwego kopiowania, tj. właściwa kopia robiona jest dopiero wtedy, gdy dane mają ulec modyfikacji. Gdy dane są pobierane "tylko do odczytu", odczytywana jest dokładnie ta sama wartość, a ponieważ PHP nie musi tworzyć dodatkowych struktur danych na utrzymywanie referencji, takie coś jest nie tylko szybsze, ale paradoksalnie oszczędniejsze pamięciowo. Ponadto nie realizujesz nawet tego, co piszesz, bo w wielu miejscach owszem, argumenty przekazujesz przez referencję, ale później już robisz zwykłe przypisanie. Ad. systemu szablonów -> widzisz, gdybyś używał standardowego nazewnictwa, nie musiałbyś nic dostosowywać z nową wersją, chyba że pomiędzy wydaniami ze zmienionym pierwszym numerkiem. Korzystam z wielu różnych bibliotek, które właśnie dzięki temu, że zachowują pewne wspólne konwencje, mogą być bez problemu używane razem i aktualizacja sprowadza się w zasadzie do wgrania nowych plików. Natomiast czym jest standardowe nazewnictwo -> - http://www.zyxist.com/pokaz.php/standaryzacja_php - http://groups.google.com/group/php-standar...-proposal?pli=1 Ad. klasy tłumaczeń -> a co ma format PO czy "XML" (w cudzysłowiu, bo nie ma czegoś takiego, jak "format XML". XML to meta-język, w którym dopiero można jakiś język opisać) do MessageFormattera, kiedy jedno i drugie zajmuje się zupełnie innymi rzeczami? - PO - składowanie i zarządzanie tekstami do tłumaczenia - MessageFormatter - formatowanie konkretnej wiadomości Jedno drugiego nie wyklucza - możesz mieć teksty w formacie MessageFormattera, który jest dużo dokładniejszy, niż printf() (zwłaszcza w takich rzeczach, jak np. obsługa liczby mnogiej), zapisane w pliku PO. W ogóle poczytaj sobie nieco o tej klasie, a zwłaszcza na jakiej bibliotece bazuje to rozszerzenie (i ilu producentów i aplikacji z niej korzysta), bo Twoje słowa zupełnie nie pokrywają się z rzeczywistością. Ad. różnych "opcjonalnych dodatków" - moim zdaniem warto zastanowić się czy niektóre z takich dodatków faktycznie są potrzebne. Już kilkakrotnie przekonałem się, że czasem lepiej jest powiedzieć "ma być tak i koniec", ponieważ w przeciwnym wypadku będziesz miał na każdym kroku mnóstwo dylematów "OK, jak ten moduł jest wyłączony, to mogę to zrobić prosto, ale ponieważ gość może go sobie włączyć, wtedy muszę to przewidzieć i dopisać tu jeszcze 154 ify, by obsłużyć wszystkie możliwe kombinacje". Ad. PHP 5.3 -> zanim webnull skończy ten "framework", jeszcze wody w Wiśle upłynie. Dziwne, że jakoś nikt nie ma oporów przed polecaniem przestrzeni nazw, tak jak inni nie mają oporów przed ich stosowaniem, a tu się czepiacie o jedną głupią klasę. A potem się będzie biadolenie na blogach, że "PHP 5.3 jest już tyle czasu, a wciąż kupa skryptów nie korzysta z jego dobrodziejstw", tak jak to z PHP 4 było. Zresztą, po co mają to wprowadzać na hostingach, skoro programiści nie znają nawet podstawowych informacji o tym, co w tej wersji wprowadzono i mają podejście, że "po co mają się uczyć, skoro hostingowcy tego nie wprowadzają"? To się nazywa samospełniającą się przepowiednią i ja osobiście nie mam zamiaru w niej brać udziału. Jak ktoś chce być zacofańcem, a potem na to samo zacofanie narzekać, to było mi miło, ja się mu kłaniać nie zamierzam. |
|
|
|
Babcia@Stefa [skrypt] "framework" OpenWikiBlog 1.09.2010, 12:50:34
SHiP Nie przeglądałem dokładnie ale jak wrócę z pracy t... 1.09.2010, 14:21:35
Spawnm czemu w index.php masz session_start() ?
query()... 1.09.2010, 14:37:04 
Babcia@Stefa Cytat(Spawnm @ 1.09.2010, 14:37:04 ) ... 1.09.2010, 14:51:12
Zyx Uwagi na szybko:
1. Jaki jest sens używania niest... 1.09.2010, 15:18:26
Babcia@Stefa Cytat(Zyx)Po co Ci w tym i w wielu innych miejscac... 1.09.2010, 15:33:11
erix Cytatklepiesz wszystko od A do Z, tymczasem PHP 5.... 1.09.2010, 16:39:51 
SHiP Cytat(erix @ 1.09.2010, 16:39:51 ) Ta... 1.09.2010, 18:45:15
Babcia@Stefa Cytat(erix)Huh, domniemam że u Ciebie coś w stylu ... 1.09.2010, 17:48:47
mike Zamiast komentować kod włóż wysiłek w jego poprawę... 1.09.2010, 18:02:37 
Babcia@Stefa Cytat(mike @ 1.09.2010, 18:02:37 ) Za... 1.09.2010, 18:28:56 
phpion Cytat(Babcia@Stefa @ 1.09.2010, 19:28... 1.09.2010, 18:38:18 
mike Cytat(Babcia@Stefa @ 1.09.2010, 19:28... 1.09.2010, 19:36:56
Babcia@Stefa Dzięki phpion, zapomniałem o "moim" stan... 1.09.2010, 18:41:55
Babcia@Stefa Dzięki SHiP, poprawione.
Wszelkie poprawki jakie ... 1.09.2010, 18:52:55
erix CytatProszę zatem przeczytać cały post, nie tylko ... 1.09.2010, 19:18:13
Babcia@Stefa Cytat(erix)Coś innego, czyli? Zachęć mnie. Podaj j... 1.09.2010, 19:24:05
SHiP @erix: Podejrzewam, że so = shared object - http:/... 1.09.2010, 19:24:29 
phpion Cytat(SHiP @ 1.09.2010, 20:24:29 ) je... 1.09.2010, 19:44:19
Babcia@Stefa Cytat(SHiP)Po co ta zmienna $APP ?
Nie potra... 1.09.2010, 19:35:42
SHiP @mike: wcale tak nie jest. Niektórzy przyjmują, że... 1.09.2010, 19:48:59
erix CytatNie muszę podawać argumentów, masz kod.
No wł... 1.09.2010, 19:53:14
mike ~SHiP wybacz ale nazwiska sygnatariuszy manifestu ... 1.09.2010, 20:19:45
Babcia@Stefa Cytat(SHiP)Pomijam fakt, że w tym projekcie część ... 1.09.2010, 20:48:05
SHiP @mike: zgadzam się i sądzę, że ilość komentarzy na... 1.09.2010, 22:21:14 
Babcia@Stefa Cytat(SHiP @ 1.09.2010, 22:21:14 ) @m... 2.09.2010, 17:56:11
nospor a ja sie poczepiam trochę bazki
[SQL] pobierz, pla... 2.09.2010, 20:01:08
erix Cytat4) `restrictip` varchar(200) NOT NULL... 2.09.2010, 20:34:07 
Babcia@Stefa Cytat(erix @ 2.09.2010, 19:34:07 ) Ju... 2.09.2010, 21:14:38 
mike Cytat(Babcia@Stefa @ 2.09.2010, 22:14... 3.09.2010, 10:26:00
erix Cytata ile hash ma znaków tego nie liczyłem narazi... 2.09.2010, 21:59:35 ![]() ![]() |
|
Aktualny czas: 10.06.2026 - 10:10 |