PHP – co robić gdy musimy wymusić typy

Jak wiadomo PHPe nie jest językiem o silnym typowaniu. W wyniku tego do funkcji możemy przesyłać praktycznie wszystko. Często brak wstępnego określania typu parametrów w deskryptorze metod/funkcji pogarsza jakość i czytelność kodu. Osobiście czytając czyjś kod lubię wiedzieć co przyjmuje funkcja/metoda tzn. jaki konkretny typ parametrów one przyjmują. Dość często powstaje różnego rodzaju pomieszania typów, czyli wchodzi string potem przemieniany jest na inta a na wyjściu na dodatek możemy dostać obiekt… Ponadto w PHPe pomimo bogatej proceduralnej biblioteki do obsługi łańcuchów znaków nie istnieje jej wersja obiektowa, a szkoda… Z tego też względu pokusiłem opisać szkicowe rozwiązanie umożliwiające połączenie przyjemnego z pożytecznym tj. utworzenie klasy osłonowej na typ String ułatwiającej operację na obiektach tego typu. Rozwiązanie to daje:
1. Możliwość pośredniego rzutowania na dobrze zdefiniowany typ String
2. Możliwość sprawdzania typu String przez interpreter, tego czy przekazujemy prawidłowy parametr do funkcji/metody
3. Ustala konwencję w kodowaniu i aplikacji.
W miarę możliwość w następnych dniach postaram się opisać prezentowane rozwiązanie. Póki co ograniczę się do przedstawienia samego kodu. Czytaj dalej

PHP – co robić gdy potrzeba coś przeciążyć?

Jednym z najbardziej dla mnie niekomfortowych żeczy w PHPe jest brak możliwości przeciążania czy to funkcji czy też metod w kontekście OO.  Jak wiadomo związane jest to z brakiem m.in. ścisłej kontroli typów. No cóż rzeczywistość jest jaka jest i trzeba do niej się dostosować. Najczęściej pojawiającym się zabiegiem w celu implementacji „przeciążania” metod jest użycie magicznych metod. Sposób takiej implementacji można podejrzeć w wpisie „Method Overloading in PHP5” na blogu Caught in a Web. Osobiście nie przepadam za tego rodzaju rozwiązaniami. Tak więc w wolnym czasie zacząłem główkować i kombinować jak to można by był zrobić troszkę inaczej. Z przemyśleń narodził się pomysł aby do „przeciążania”  (pseudo przeciążania) wykorzystać namespace (opis dostępny w manualu PHP oraz na stronie z poradnikami IBMa „Create better namespaces in PHP”). Pomysł bazuje na prostych zasadach:

– wykorzystaniu  bazowej przestrzeni nazw dla metod podstawowych które będą przeciążane, zaimplementowane lub nadpisane w klasach potomnych. Najlepiej wykorzystać abstrakcje,

– wykorzystaniu predefiniowanych przestrzeni nazw  do enkapsulacji przeciążanych klas i ich metod,

– zamknięcie przestrzeni bazowej i predefiniowanej w jednym pliku (daje to swego rodzaju konwencję utrzymania kodu i jego standaryzację w obrębie realizowanego projektu). Ewentualnie można odpowiednio sobie porozbijać klasy na pliki. Opisu tego rozwiązania jednak nie dokonałem i jedynie skupiłem się na podstawowej strukturze – jeden plik.

Przykładową implementację całości rozwiązania bazującego na ww. zasadach przedstawiłem poniżej. Miłego czytania i zapoznawanie się z pomysłem.  Czytaj dalej

Web services dla PHP

Właśnie, web serwisy ważna technika w codziennej pracy programistycznej… Właśnie sobie przypomniałem, że istnieje framework dla PHPa to tworzenia web serwisów i generowania WSDLa z odpowiednio otagowanej klasy. Bliższe szczegóły możecie znaleźć na stronie WSF PHP | WSO2, natomiast mały wstęp pokazujący co i jak i w dodatku po polsku można odnaleźć na „Jak napisać w PHP własny Web Service korzystając z rozszerzenia WSF / WSO2.”. Powodzenia i miłego programowania.

Do generowania WSDLa podobno nadaje się Webservice Helper znajdujący się na jool.ln ale tego rozwiązania nie stosowałem, jeśli ktoś miał z nim do czynienia to zachęcam do podzielenia się doświadczeniem.

Dobre nawyki programowania w PHP

Co prawda już trochę „wiekowy” artykuł, ale wart polecenia ze względu, że rozwiązania tam przedstawione są ponad wiekowe. Polecam więc zapoznać się z zawartością artykułu „7 dobrych obiektowych nawyków dla programistów PHP„. Zachęcam do zaznajomienia się z pozostałą bazą artykułów dotyczącą programowania na serwisie IBM.

MongoDB słów parę kilka

Przy projektowaniu baz danych w szczególności dla większych i bardziej złożonych projektów, przydają się narzędzia graficzne czy to do projektowania bazy czy też administracji. Aktualnie dla MongoDB są dostępne cztery narzędzia do administrowania i zarządzania tą bazą danych, są nimi:

– konsola MongoDB – odpowiednik konsol postgreSQL czy MySql

– GitHub – służy do wizualizacji i zarządzania klastrami

– futon4mongo

– phpMoAdmin – coś na wzór popularnego phpMyAdmin

Bliższe szczegóły i linki do ww. projektów można znaleźć w poście A Couple of Nice GUI Tools for MongoDB.

Dodatkowo, szperając po sieci odnalazłem wzmiankę na temat obiektowego mapowania dokumentów do MongoDB przez Doctrine 2.0. Zainteresowanych odsyłam na stronę bloga Doctrine MongoDB Object Document Mapper.

mongoDB czyli nie relacyjna baza danych

Ciekawych rozwiązań projektowym pośrednim między ang. key/value stores a relacyjnymi bazami danych jest projekt mongoDB. Natknąłem się na niego czytając post „ORMs and relational databases: powerful tools or dumb ideas?”. Jak zawsze zachęcam do zapoznania się z materiałami na temat tego rozwiązania. Bliższe szczegóły na temat projektu i jego zastosowania można znaleźć na stronie producenta mongoDB jak i szperając po wyszukiwarkach, polecam „marchewkę„. Poniżej podaję też namiary na parę interesujących   wpisów, artykułów na temat mongoDB:

MongoDB – Ruch NoSQL przyszłością baz danych?

Zarządzanie danymi w bazie MongoDB

MongoMapper Indy.rb Presentation

Postscriptum osobiście mażę o obiektowej bazie danych dla PHPa aby można było porzucić różnego rodzaju  ORMy i składować swoje modele biznesowe prosto do bazy danych bez mapowania, tak jak to mogą robić programiści w JAVIE lub C# w bazie db4o. Póki co jednak zostają ORMy lub mosty między PHPem a JAVa myślę jednak, że to jeszcze nie to…

Trochę o abstrakcjach

O abstrakcjach a dokładniej wzorcu dotyczącym abstrakcji występującym w programowaniu obiektowym napisano już wiele. Tak więc aby już się nie powtarzać i opisywać rzeczy powszechnie znanych pragnę jedynie podać trzy interesujące pozycje: dwie książkowe i jedną elektroniczną. Pierwsza pozycja dotyczy książki pt. „PHP5. Obiekty, wzorce, narzędzia” autorstwa Matta Zandstra. Nie jest to pozycja zbyt łatwa i przyjemna niemniej stanowi ona pierwszą książkę o programowaniu obiektowym w php5 i znajdujące się tam wytłumaczenie wzorca abstrakcji jest jak najbardziej dostępnie wytłumaczone dla czytelnika. Drugą pozycję literaturową, drukowaną stanowi już kultowa publikacja pt. „Wzorce projektowe” która wydana została przez tzw. Bandę Czworga w skład której wchodzą tak znani programiści jak: Erich Gamma , Richard Helm , Ralph Johnson oraz John Vlissides. Ostatnim źródłem z którego można czerpać informację na temat wzorca abstrakcji, ale i nie tylko, jest blog SourceMaking. Na blogu tym opisano, oprócz powszechnie stosowanych wzorców projektowych, także zagadnienia dotyczące: anty-wzorców, refaktoryzacji oraz modelowania za pomocą języka UML. Zapraszam gorąco do lektury.

Kilka ciekawych rozwiązań…

Szperając trochę po sieci i starając odnaleźć zagubioną niegdyś myśl dotyczącą pakowania aplikacji w jeden plik natknąłem się na ciekawy blog Macieja Wilguckiego. Przedstawia on w jasny i sposób w jaki sposób używać phara i przestrzeni nazw. Zaciekawionych tą tematyką odsyłam bezpośrednio na wspomnianego bloga do sekcji poświęconej Phar&Namespace. W dalszej kolejności mogę zarekomendować blog Rumena Vermeerscha na którym opisał podstawową konfigurację i integrację Doctrine z ZFem. Zainteresowanych odsyłam do artykułu umieszczonego bezpośrednio na jego stronie Integracja ZF i Doctrine. O integracji tych dwóch rozwiązań można poczytać także tutaj ZF+Doctrine. Trzymając się treści phpowych dla zainteresowanych tematyką web serwisów mogę polecić framework wso2 którego dokumentacja znajduje się na stronie http://wso2.com/products/web-services-framework/php/#tabs. Dla osób chcących poczytać w rodzimym języku na temat zastosowania tego frameworka polecam stronę http://www.pageneration.com/profile/php. Natomiast dla pasjonatów tematyki sieci semantycznych polecam blog Semantic Web. Sieć nowej generacji.

Małe po-kodowanie

Ostatnio zamknięty został nowy projekt dla Moto Garage Adam Szekalski. Projekt był już dość złożony edycja wszytskich treści we front-endzie poprzez panel administratora z beckendu. Tak więc klasyczny CMS został postawiony. Wszystko zwyczajowo w ZF 1.10. Pozostaje teraz tylko to wszystko wypozycjonować w przeglądarkach. Stronę można oglądać pod adresem Moto Garage.

Formularze – wgrywanie plików

Mam masę linków do różnych blogów które nie zmieściły by się w Blogroll. Tak więc odsyłam bezpośrednio z posta do miejsc ciekawych i wartych przejrzenia. Ostatnio, a może nawet znowu, zajmowałem się wgrywaniem wielokrotnym plików i paskami postępu. Zend framework od wersji chyba 1.8 oferuje rozszerzenie Zend_ProgressBar jego opis  instalacji, konfiguracji i działania został opisany prosto, jasno i przyjemnie na blogu http://mateusztymek.pl/blog/zend-form-i-wysylanie-plikow-cz-3. Porzuciłem jednak to rozwiązanie na rzecz  uploadify (www.uploadify.com) z powodu tego, że Zend_ProgressBar do wgrywania plików z torzonym paskiem postępu wymaga instalacji rozszerzenia z PECL – APC lub uploadprogress. Wymaga to więc najczęściej serwera dedykowanego lub operatora który dostarczy nam takie rozszerzenia.