Ciekawe miejsca w sieci

Dzisiaj nic o rozwiązaniach tych czy innych… Dzisiaj po prostu mam do polecenia, blog kolegi po PHPowym fachu, z którym miałem możliwości i przyjemność realizować parę ciekawych projektów. Na pewno w miarę czasu znajdziecie na nim garść   informacji. Zachęcam więc do jego regularnego, mniej lub bardziej, odwiedzania. Zapiski blogowe możecie znależć na stronie http://dev.kardasz.eu/. Ponadto zachęcam do zapoznania się z przez niego rozwijanym frameworkiem w ZFie pt. Nweb Framework. Miłej lektury.

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.