Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu php Kanał ATOM (tag: php)

Autor wpisu: bastard13, dodany: 23.07.2011 00:32, tagi: php

pre { border: #aaa solid 1px; padding: 10px; margin: 5px 5px 15px 5px; font-family: "Courier New",Courier,monospace; background-color: #f9f9f9;}pre span.key_word { color: #006699; font-weight: bold;}pre span.comment { color: #008200}pre span.variable{ color: #AA7700}p { margin: 0px;}Klasy abstrakcyjne i interfejsy są bytami, które nie tylko ułatwiają pisanie kodu, ale także sprawiają, że kod jest czytelniejszy i bardziej przejrzysty, a logika aplikacji prostsza do zrozumienia. Ich poprawne i przemyślane zastosowanie z pewnością opłaca się, gdy aplikacja zaczyna się rozrastać i/lub zmieniać.O tym co to jest interfejs oraz klasa abstrakcyjna można przeczytać w wikipedii. I choć zrozumienie tego, czym są nie jest wcale takie skomplikowane, to poprawne ich stosowanie nie jest czasami oczywiste.Nie chcę tytułować się żadnym ekspertem w tej dziedzinie, ale po pewnym czasie spędzonym nad projektowaniem aplikacji i wdrażaniem tych rozwiązań, chciałem się podzielić wnioskami.Kiedy więc powinno się stosować interfejsy i/lub klasy abstrakcyjne?Pozwolę sobie to wszystko zaprezentować na prostym przykładzie:
<?phpclass Man{  public function sleep() {/*...*/}  public function eat() {/*...*/}  public function doMenStuff() {/*...*/}}class Woman{  public function sleep() {/*...*/}  public function eat() {/*...*/}  public function doFemaleStuff() {/*...*/}} 
W powyższym przykładzie mamy dwie klasy (Man i Woman), w których jesteśmy w stanie wyodrębnić pewną część wspólną. W takiej sytuacji warto rozważyć utworzenie nadklasy abstrakcyjnej po której będą dziedziczyły obie klasy. W tym wypadku takie rozwiązanie jest idealne:
<?phpabstract class Human

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

Autor wpisu: sokzzuka, dodany: 20.07.2011 08:55, tagi: php

Kilka dni temu – 14 lipca, światło dzienne ujrzała nowa odsłona PHP 5.4 – alpha 2. Można ją ściągnąć z http://downloads.php.net/stas/ w wersji „czystej” oraz z http://windows.php.net/qa/ jako binarny plik dla Windows. Kolejna alpha przewidziana jest za 3 lub 4 tygodnie, teoretycznie powinna się pojawić 4-tego sierpnia. Najważniejsze nowości jakie przyniosła ta wersja to przede wszystkim:

O innych nowościach i zmianach możecie przeczytać w logu.

Autor wpisu: Tomasz Kowalczyk, dodany: 20.07.2011 00:02, tagi: symfony, framework, php

Witajcie ponownie. Ostatnio pracuję nad pewnym projektem opartym o symfony, w związku z czym po raz kolejny mam okazję pomęczyć się trochę z jego wszystkimi zawiłościami. Dzisiejszy problem trochę mnie zdziwił, ponieważ nie spodziewałem się tego typu restrykcji ze strony frameworka, stąd też tradycyjnie szukałem błędu nie tam, gdzie powinienem. Na szczęście udało mi się [...]

Autor wpisu: sokzzuka, dodany: 19.07.2011 15:57, tagi: php

Jak wszyscy (albo i nie) wiedzą, na co dzień korzystam z Netbeans IDE. Niedawno w pracy zmieniliśmy tryb rozwijania oprogramowania na taki, który obejmuje między innymi metodykę TDD (Test Driven Development). Wobec tego faktu, powstała konieczność tworzenia i uruchamiania testów jednostkowych. Netbeans wspiera obie te czynności zapewniając przyjemny graficzny interfejs dla wszystkich związanych z tym operacji, jak również generator plików testów dla klas. Ten mały tutorial ma pokazać, jak w kilku prostych krokach zainstalować PHPUnit oraz zintegrować go z Netbeans IDE.

Pierwsze co musimy zrobić, to zainstalowanie menedżera paczek „PEAR„. Jest on potrzebny do ściągnięcia PHPUnit wraz z zależnościami. Nie jest to konieczne do rozpoczęcia testów z PHPUnitem, natomiast, jako, że PEAR jest standardowym repozytorium bibliotek dla języka PHP warto się z nim przy okazji zapoznać.

By zainstalować menedżera paczek PEAR, należy wykonać następujące kroki:

  1. Ściągnąć instalator do katalogu PHP z aktualnie używaną wersją
  2. Otworzyć wiersz poleceń, przejść do katalogu zawierającego ściągniętą paczkę i wpisać php go-pear.phar
  3. Instalacja menedżera pakietów odbędzie się automatycznie, na końcu instalator poprosi nas o sprawdzenie wszystkich ustawień i ścieżek, z ciekawostek powiem, że jeżeli będziemy chcieli zmienić ustawienie miejsca gdzie znajduje się php.exe to wyskoczy nam ładne windowsowe okienko wyboru pliku (a jednak się da!)

W tym momencie powinniśmy mieć zainstalowanego menedżera paczek. By zainstalować PHPUnit, należy wykonać następujące kroki:

  1. W konsoli wpisać (może być konieczność przejścia do katalogu z pehapem): pear channel-discover pear.phpunit.de pear channel-discover components.ez.no pear channel-discover pear.symfony-project.com
  2. Zainstalować PHPUnit pear install -o phpunit/PHPUnit Przełącznik -o powoduje, że zostaną zainstalowane automatycznie wszystkie wymagane zależności. Podczas instalacji zdarzyło mi się, że nie można było zainstalować niektórych potrzebnych paczek, ponieważ były w wersjach „beta”. W takim przypadku należy zainstalować je ręcznie wpisując: pear install nazwa_paczki

Mając już zainstalowanego PHPUnit, możemy go skonfigurować do pracy z Netbeans:

  1. Przechodzimy do opcji i ustawiamy ścieżkęUstawianie ścieżi do PHPUnit w NetBeans
  2. Przechodzimy do właściwości bieżącego projektu i ustawiamy folder testowy (wpierw musimy go stworzyć w drzewie katalogów)Ustawienie katalogu z testami w własciwościach projektu
  3. Ustawiamy boostrap i konfigurację PHPUnitKonfiguracja PHPUnit i bootstrapPo co są nam potrzebne oba pliki ? Dzięki boostrapowi będziemy przede wszystkim ustawić własny autoloader. Natomiast configuration.xml daje nam dostęp do wielu ustawień PHPUnit
  4. Przykład boostrapa:
    function load($className) {
        $path = str_replace('_', DIRECTORY_SEPARATOR, $className);
        $path = '../src/' . $path . '.php';
        if (file_exists($path)) {
            require $path;
        }
    }
    
    spl_autoload_register('load');
    

    Mocno polecam rejestrację autoloadera przez spl_autoload_register, ponieważ zdaje się PHPUnit ma własny autoloader i jest to najprostszy sposób by nie wchodzić z nim w konflikt.

Gdy już mamy wszystko zrobione możemy cieszyć się takimi oto udogodnieniami jak:

  • generowanie szkieletów testów prawyklik na plik -> tools -> create PHPUnit test
  • automatyczne uruchamianie testów (alt+f6)
  • ładne okienko z podsumowaniem ;)  Ładne okienko z podsumowaniem

Mam nadzieję, że ktoś skorzysta z tego małego tutoriala i będzie bez przeszkód oddać się unit testom ;)

Autor wpisu: singles, dodany: 16.07.2011 18:55, tagi: javascript, php

Pisałem niedawno na temat inicjatywy DevMeetings – serii darmowych szkoleń dla developerów. Otóż to, Panowie robią świetną robotę w całej Polsce, ale ostatnio poszli jeszcze dalej. W ich głowach narodził się DevCamp. A co to takiego, po co to komu, i jakie są tego wyniki dowiecie się czytając dalej.

Zbieranie sił

Jakie było me zaskoczenie, kiedy 1 czerwca dostałem zaproszenie na coś, co kryło się pod nazwą DevCamp. Pozwolę sobie zacytować treść tego zaproszenia, które od razu przybliży wam cel tego przedsięwzięcia:

Co to jest? 3-dniowy event o charakterze “R&D-Campa”, na ktory zapraszamy najbardziej doswiadczonych JavaScript Developerow oraz Backend-Developerow i rozgryzamy najbardziej zaawansowane kwestie zwiazane z SSJS.

Po co? Koncentrujemy sie na niebanalnych i trudniejszych zagadnieniach zwiazanych z SSJS, jakie wystepuja w “prawdziwych”, komercyjnych projektach, udostepnionych produkcyjnie. Nasz cel: po DevCampie jestes w stanie implementowac produkcyjna aplikacje w SSJS: od wyboru technologii, po deployment na srodowisko live i monitoring aplikacji.

Kilka przykladowych tematow:

  • Jak migrowac baze mySQL do CouchDB lub MongoDB

  • Jak przekonac management do uzywania SSJS w firmie

  • Badanie wydajnosci: Node vs RingoJS vs V8CGI vs Java vs PHP – zarowno testy obciazajace I/O, jak i CPU

  • Security aplikacji opartych o SSJS, m. in. zgodnosc z OWASP10; Single SignOn, autentykacja / autoryzacja

Zdecydowałem się, czego nie żałuję i tak na początku lipca wylądowałem we Wiejcach, gdzie przez najbliższe 3 dni odbywała się totalna burza mózgów na temat SSJS.

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

Autor wpisu: sokzzuka, dodany: 15.07.2011 09:08, tagi: php

Jedną ze świetnych i unikalnych cech języka Scala, której PHP nie posiada są tzw implicit conversions zwane też przez oficjalną dokumentację „widokami” (views). Podobny mechanizm zaimplementowany jest w C#, chociaż szczegółów szczerze powiedziawszy nie znam ;) .Przejdźmy jednak do rzeczy. Czym jest widok/implicit conversion ? Jest to technika niejawnego rzutowania za pomocą funkcji zdefiniowanej przez użytkownika. Przydaje się ona gdy chcemy np. rozszerzyć wbudowaną w język klasę o swoje metody. Funkcję konwertującą definiujemy poprzez dodanie słowa kluczowego „implicit” przed deklaracją funkcji.

Poniżej przykład implicit conversion na wbudowanej klasie „String”, dzięki któremu dodajemy do niej znaną z PHP metodę „stripslashes”:

Najpierw definiujemy nową klasę stringów nazwaną „MyString”:

class MyString(val value: String){

  def stripslashes():String = {
    return this.value.replace("\\\\","")
    }
  }

Następnie definiujemy funkcję konwertującą:

implicit def stringToMyString(string: String) = new MyString(string)

Czas na testy. Najpierw klasycznie, bez użycia widoku:

val test1 = new MyString(" aaa \\\\ ");
println(test1.stripslashes) //wyświetli aaa

Z użyciem widoku:

val test2 = " aaa \\\\ "
println(test2.stripslashes) //wyświetli aaa

Jak widać, dzięki technice widoków możemy łatwo wzbogacać wbudowane typy (i nie tylko) o nowe funkcjonalności, czyniąc kod bardziej przyjaznym. Zasięg implicit conversion jest zależny od kontekstu w jakim został zdefiniowany – jeżeli zdefiniujemy go klasie to ma zasięg do klasy, jeżeli w paczce to do paczki.

Technika implicit conversion jest w pewnym stopniu podobna do zgłoszonego kiedyś do PHP ficzeru zwanego autoboxingingiem, z tą różnicą, że mechanizm implicit conversions jest mniej „magiczny” oraz ma wyraźne granice zasięgu działania. Uważam, że jest również lepszy od otwierania klas znanego z języka Ruby, oraz Javascriptowego przyłączania metod do prototypu, z powodów takich samych jak wymienione wcześniej.

A wy co o tym sądzicie ?

Autor wpisu: Tomasz Kowalczyk, dodany: 15.07.2011 01:39, tagi: php

Pracując z wieloma technologiami codziennie zachwycamy się możliwościami różnego rodzaju oprogramowania. Kolejne wersje funkcji, bibliotek, frameworków to bezsprzecznie nasz żywioł, w którym słychać tylko głosy mówiące: "a widziałeś, co nowego wprowadzono w wersji 2.0?". Oczywiście rozwój pojedynczych narzędzi jest ważny, aczkolwiek należy mieć na uwadze fakt, iż najpiękniejsza w tym wszystkim jest harmonia, którą osiąga [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.