Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Athlan, dodany: 17.01.2007 17:16, tagi: php

Ostatnio przeglądałem forum.php.pl i znalazłem kilka postów, które dały mi do zrozumienia, że część społeczności nie potrafi używać, lub w ogóle nie wie czym jest singleton. Jakoże staram się pomagać bliskim mi w mojej branży ludziom o ile pozwala mi na to czas i ohota, postaram się wyjaśnić prostymi słowami czym jest i jak uzywać singletona. W artykule poruszone jest wiele problemów, np dziedziczenie songletona wraz z przedstawianymi rezultatami działań (unikatowe identyfikatory instacji klas). Przedstawiłem wzorzec registry, zapraszam do lektury.

1. Czym jest singleton – teoria

Singleton to pojedyncza instacja klasy, mówiąc szerzej: dostępna w obrębie całej aplikacji w postaci jednego egemplarza, aby nie tworzyć cały czas nowej kopii obiektu operatorem new i korzystać z nej tak, jak ze zwykłej klasy (a nie z metod statycznych). Cały singleton opiera się na tym, że klasa przechowuje instancję samej siebie w prywatnym statycznym atrybucie, który jest tworzony i pobieranie w metodzie statycznej zastępującej konstruktor. No właśnie... jak zablokować nasz konstruktor, aby nie można było posłużyć się klasą poprzez operator z zewnątrz metody uruchamiającej ową instancję. Jeżeli klasa nie będzie dziedziczona, metodzie konstrukcyjnej nadajemy prawa dostępu na „private”, lub jeżeli chcemy dziedziczyć klasę „protected”.

Dobrze zablokowaliśmy dostęp do klasy, teraz trzeba jakoś przechować obiekt i wywołać go. Do przechowania instancji klasy będzie służył jej wbudowany mechanizm polegający na zapisie egzemplarza do własnego prywatnego/chronionego atrybutu i wywołaniu przez metodę statyczną klasy zwracającą ową instancję. Zapoznamy się ze słowem kluczowym „instanceof”, który sprawdza, czy obiekt jest instacnją danej klasy.

2. Piszemy singleton niedziedziczony i dziedziczony - praktyka

Teorię znamy, czas na przyklad. Napiszemy klasę HelloWorld, która wykona songletona sama siebie:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Athlan, dodany: 03.01.2007 18:07, tagi: framework, php

Dziś chciałbym zaprezentować framework, ktory zbudowałem i opieram na nim swoje aplikacje. Jest stale rozwijany, nie ukryję że może spotkać się z gorzkimi słowami krytyki, ale też słodkimi pochwały. Przygotowałem prawie pełną dokumentację, która umieszczona jest na stonie domowej frameworka:

http://framework.vgroup.pl

Wraz z działem download oraz manualem na stronie na bieżąco będę publikował przykłady użycia jakiś komponentów, na dzisiejszy czas są to: upload pliku, caching działania zapytania do bazy danych oraz zmniejszenie pliku graficznego. Najlepszym przykładem będzie aplikacja napisana na frameworku, dlatego zmieściłem kod swojego portfolio http://www.vgroup.pl. Repozytorium plików możecie znaleźć pod adresem http://source.vgroup.pl

Download frameworka oraz przykładowego szkieletu katalogów aplikacji: http://framework.vgroup.pl/download.html

Instalacja: http://framework.vgroup.pl/read-instalacja.html

Repozytorium plików frameworka wraz z podstawowymi bibliotekami (mojego autorstwa): http://framework.vgroup.pl/repository.html

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Athlan, dodany: 27.12.2006 15:20, tagi: framework, php

Kiedyś napisałem klasę ModRewriteString, którą opublikowałem na łamach forum.php.pl, która ma sprowadzić polskie, niemieckie i czeskie znaki do zwykłych liter, na przykład ą do a, ż i ź do z, itd. Na potrzeby jednego z moich projektów (portalu) została ona użyta na kodowaniu UTF-8. Okazało się, że klasa akceptuje tylko kodowania WINDOWS-1250 i ISO 8859-2. Ze znaków zakodowanych przez UTF robił się znak nieodczytywalny, potocznie zwany "krzak". Problem został oznaczony jako bug najwyższego stopnia, klasa trafiła natychmiastowo do analizy. Z pomocą przyszła dokumentacja na temat Multibyte String Functions (rozdział LXXXV) dostępna w podstawowych rozdziałach oficjalnej dokumentacji języka PHP: http://pl2.php.net/manual/pl/ref.mbstring.php Ponadto cały dokument z klasą był zakodowany w formie ASCII, co jest niedorzeczne w tego typu działaniach. Plik zawierający klasę został ujęty w formie UTF-8 - uniwersalnego kodowania, które można bez problemu odkowodać.

Zmiany objęły tylko metodę Rewrite(), przyjmuje ona dodatkowy, nieobowiązkowy drugi parametr, który ustawia tryb pracy klasy na podane kodowanie. Gdy parametru nie podamy, lub otrzyma wartość null, wówczas kodowanie zostanie ustawione automatycznię poprzez analizę podanego ciągu znaków przez funkcję mb_detect_encoding(). Kodowanie jest o tyle ważnym elementem, gdyż zostaje podane wewnątrz klasy w funkcjach mb_strtolower() oraz mb_strlen(), odpowiedzialnych za poprawne wykonanie zadania metody.

Dodana została linijka odpowiedzialna za przerwania działania klasy juz na samym początku. Sprawdzane zostaje załadowane rozszerzenie "mbstring", odpowiedzalne za Multibyte String Functions. Gdy rozszerzenie nie zostanie załadowane, konstruktor wyrzuca wyjątek pierwotnej klasy Exception:

PLAIN TEXT PHP:
  1. if(!extension_loaded("mbstring"))
  2. throw new Exception('MbString has not been enabled yet!');

Wersja klasy została oficjalnie uznana za stabilną, nadany jest jej numerek 0.0.5.

Zastosowanie klasy:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Athlan, dodany: 25.12.2006 17:31, tagi: php, framework

Dyzo rozmyślam o kanałach informacyjnych. Świetna sprawa, jeżeli wiem, że na mojej ulubionej stronie pojawiła sie nowa notka lub wpis, mogę zostawić sobie go do przeczytania na później wiedząc o tym, że jest. Mowię tutaj o kanałach RSS, XML i Atom. Specjalnie z tej okazji założyłem sobie na bloga OperaWidget. Teraz mój kanał RSS importowany jest do widżetu. Uruchomienie jest napradę proste. Teraz w pasku adresu macie nowy, niebieski przycisk, po jego uaktywnieniu na Operze możecie korzystać z widżeta mojego RSS.

Odnośnie samych kanałów RSS, w wigilijną noc zacząłem kodzić, gdyż będą stanowić część mojego frameworka. Stworzyłem trzy klasy, odpowiedzalne kolejno za kanały: RSS, Atom i XML. Powstała nowa notka na forum php.pl:

http://forum.php.pl/klasy-php5-Generator-kanalow-informacyjnych-Feeds-t59071.html

Może dział nie jest trafny co do mojego celu zamieszczenia tych klas, ale po części chodzi mi o ocenę. Ostatnio dużo myślałem nad obsługą kanałów informacyjnych w moim fameworku (ang. Feeds). Sprawa wygląda bardzo kontrowersyjnie, bowiem RSS nie cieszy się już taką dobrą opinią, jednak większość użytkowników używa właśnie tej wersji kanałów informacyjnych. Według ekspertów jego miejsce ma zastąpić kanał Atom, który stał się trendem i już rok temu liczba jego użytkowników znacznie wzrosła. Pomyślałem również o udostępnianiu naszych informacji w formie czystego arkusza XML.

Vfeed 0.1 - download

Powstały kolejne klasy:

Feed.Class.php – klasa abstrakcyjna, a zarazem rodzic wszystkich innych klas kanałów informacyjnych. FeedRSS.Class.php – kanał informacyjny w formie RSS FeedAtom.Class.php – kanał informacyjny w formie Atom FeedXML.Class.php – czysty arkusz Tagów XML, nie przedstawiany jako kanał, ale jako dostępne źródło informacji, zaliczyłem go jako kanał, gdyż można z niego pobierać informacje poprzez różne dostępne metody takie jak SimpleXML, czy SAX.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: WojciechNaruniec, dodany: 23.12.2006 23:13, tagi: php, framework

Jeśli chcemy aby aplikacja korzystająca z podstawowych bibliotek Zend Framework w wersji 0.2.0 działała po aktualizacji frameworka do wersji 0.6.0 musimy wprowadzić kilka zmian. Wprawdzie w dokumentacji został opisany sposób migracji, ale tylko dla komponentów kontrolera. Poniżej kilka porad. Zmiana sposobu ustawienia ścieżki bazowej Dodanie drugiego parametru w wywołaniach konstruktora Zend_Filter_Input Zamiana konstruktorów __construct() w klasach kontrolerów na [...]

Autor wpisu: Athlan, dodany: 23.12.2006 12:51, tagi: php, framework

Ostatnio dużo myślałem nad tym, co jeszcze można dodać do mojego frameworka, bo jest bardzo duży, a do publikacji (03.01.2007) już niedługo. Przez moją myśl przeszło ściąganie plików… no tak. Teraz gdzie to ująć :) . Mam klasę odpowiedzialną za przechwycenie uploadowanych plików, zbieranie informacji o nich, kopiowanie. Może tam? Owszem.

Kwestia ściągnięcia plików jest bardzo prosta: do przeglądarki wysyłamy odpowiednie nagłówki oraz wczytujemy treść, która zostanie pobrana. Możemy podjąć dowolną nazwę pliku, chociaż oryginalny ma nazwę stałą. Zacząłem szukać źródeł, w których zastosowane jest pobieranie plików.

Szczególnie pomocnym skryptem okazał się FileSupply mojego kolegi Korneliusza Jarzębskiego (bardziej znany pod nickiem Bastion, autor słynnych klas takich jak Babel, Chameleon, ScoutGeo, FileMagic). Dlaczego ten skrypt? Przykładem jest funkcja ekspozycji pliku, na samej górze jest link, za pomocą którego bez problemu możemy pobrać plik. Zacząłem szperać w kodzie :)

Po zapoznaniu się ze sposobem pobierania (nagłówki umiałem wysłać już wcześniej), który opierał się na pobraniu zawartości plików „w kawałkach” postanowiłem zastosować to w nowej metodzie mojej klasy. Co oznacza tzw. Pobieranie „w kawałkach”? Często serwer mówi , że odczytywana treść wielkiego pliku przekroczyła dozwolony limit bajtów, haczykiem podsuniętym mi przez Bastion’a jest to, że pobieramy go w partiach: 64 * 1024 bajtów (64 kilo), po czym przerywamy odczyt i pętla działa dalej, od momentu w którym przerwaliśmy. Zapobiegnie to wyświetleniu błędów o dużym pliku :) .

Ok, czas na kod całej klasy, dodana została metoda download, która jest statyczna, można ją wykorzystywać bez uprzedniego wywoływania instancji klasy. W pierwszym parametrze podajemy ścieżkę do pliku, a w drugim (nieobowiązkowo) nazwa pliku, pod którą ma być on pobrany. Gdy drugi argument pozostanie pusty, nazwa pliku który zostanie wysłany jako nagłówek do ściągnięcia pozostanie taka sama jak oryginalny plik. Przed wywołaniem metody wysłania pliku, nie mogą zostać przesłane żadne nagłówki, po metodzie nie mogą być wykonywane żadne działania przez skrypt php.

Pełny kod obsługi plików w moim frameworku (omawiana została metoda Vfile::download() ): http://phpfi.com/187275

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: WojciechNaruniec, dodany: 17.12.2006 22:36, tagi: php, framework

Zend Framework osiągnął półmetek, dziś została wydana wersja 0.6. W tym roku to już ostatnie wydanie, kolejnych można będzie się spodziewać w styczniu (0.7), lutym (0.8) i w marcu (0.9 oraz 1.0RC). W wersji 0.6 dość mocno przebudowana została implementacja MVC, a w inkubatorze są już dostępne klasy do obsługi autoryzacji, uprawnień acl i obsługi [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.