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

Autor wpisu: Piotr Pasich, dodany: 23.01.2015 07:00, tagi: php

4509165024_a41e37c1bd_b

When we were in Madrid last year, a book was accompanied me – the new edition of Clean Code authored by Uncle Bob. He describes how the professional programmer acts, works, talks and develops himself. Robert C. Martin claims an example from his own life – a quick, 15 minutes, code kata done twice a […]

The post Friday Dopamine Dump appeared first on Piotr Pasich.

Autor wpisu: Piotr Pasich, dodany: 22.01.2015 09:00, tagi: php

loop

This topic’s stayed in my mind for a while. Inspired by Joshua Thijssen’s presentation from PHP UK about (re)discovering the SPL in PHP, I decided to investigate this more carefully. I have to admit that took me some time to understand how the things work and how to not misunderstood the purposes of each iterator […]

The post SPL Iterators against the performance appeared first on Piotr Pasich.

Autor wpisu: Kamil Adryjanek, dodany: 21.01.2015 10:36, tagi: php, symfony2

symfony2-1 A few weeks ago i have introduced nice CRUD generator for generating basic admin scaffold. Today I have something even more interesting: Easy Symfony2 Admin panel generator. According to the documentation we should be able to generate complete and good looking admin panel in about 30 seconds (not including the installation and configuration). I decided to give this bundle a shot.

Post Symfony2 Admin panel in 30 seconds? pojawił się poraz pierwszy w Kamil Adryjanek.

Autor wpisu: Piotr Śliwa, dodany: 07.01.2015 01:20, tagi: php

Na wstępie: fajnie by było, abyś wiedział mniej więcej co to jest Mock, Stub i Fake - nie będę tego jakoś szczególnie objaśniał bo idea tego wpisu jest inna niż wstęp do "zaślepek". Tutaj możesz poczytać o różnych zaślepkach na przykładzie PHPUnit.

Spis treści, a jak!

  1. Wstępniak
  2. Kiedy Mock?
    1. Przykład zaślepiania metody typu Query
      1. Zaślepienie metody Query za pomocą Mocka
      2. Zaślepienie metody Query za pomocą Stuba
      3. Zaślepienie metody Query za pomocą Fake
      4. Przemyślenia na temat zaślepiania metod typu Query
    2. Przykład zaślepiania metody typu Command
      1. Zaślepienie metody Command za pomocą Stuba
      2. Zaślepienie metody Command za pomocą Mocka
      3. Zaślepienie metody Command za pomocą Fake
      4. Przemyślenia na temat zaślepiania metod typu Command
  3. Końcowe przemyślenia

Wstępniak do góry

Dla przypomnienia, zaślepka (z ang. Test Double) to obiekt, który jest przekazywany do obiektu testowanego zamiast obiektu będącego rzeczywistą zależnością w kodzie produkcyjnym. Przykładem może być wstrzyknięcie zaślepki obiektu ProductRepository (abstrakcji na persystentną kolekcję produktów) do jakieś usługi, np. ProductService.

Aby utworzyć obiekt ProductService potrzeba ProductRepository, aby utworzyć ProductRepository musimy utworzyć EntityManagera (zakładam implementację opartą na Doctrine), aby utworzyć EntityManagera trzeba utworzyć konfigurację oraz połączenie z bazą danych, aby połaczyć się z bazą danych musimy mieć z czym się połaczyć, więc serwer bazy danych musi być zainstalowany, schema bazy powinno być utworzone itp. Aby utworzyć obiekt konfiguracji, trzeba utworzyć obiekt cache... Na litość Boską, ja tylko chcę przetestować czy ProductService::createProduct($name, $price) tworzy obiekt produktu, zapisuje go w repozytorium i triggeruje przy tym odpowiedni event...

Powyższa historyjka pokazuje jedną z przyczyn stosowania zaślepek. Jest ich więcej, np:

  • Uproszczenie setUp testu
  • Testy w izolacji (tzw. testy jednostkowe), nie chcemy drugi raz testować DoctrineProductRepository - ta klasa ma osobne testy!
  • Zwiększenie szybkości wykonywania testów - zewnętrzny web service zastępujemy lokalnym Stubem/Fake, repozytorium operujące na bazie zastępujemy implementacją in memory
  • Możemy w prosty sposób przetestować sytuacje brzegowe, które ciężko zreprodukować wykorzystując rzeczywisty obiekt
  • Podczas pisania implementacji klasy X, która zależy od typu Y, nie mamy jeszcze implementacji Y

Oczywiście są sytuacje, w których nie należy stosować zaślepek. Należy pamiętać, że nie należy zamieniać części obiektu/podsystemu który testujemy. Np. nie powinno się zastępować EntityManagera implementacją "in memory" w testach DoctrineProductRepository, gdyż testy te mają testować, czy poprawnie szukamy / zapisujemy dane w bazie.

Kiedy Mock? do góry

W idealnym świecie, zgodnie z zasadą Command-Query separation, każda metoda powinna być typu Command lub Query.

  • Command - zmienia stan obiektu/systemu nie zwracając żadnej wartości - najprostszy przykład to setter ;)
  • Query - pobranie stanu obiektu/systemu nie zmieniając stanu - najprostszy przykład to getter

W złym guście jest tworzenie metod które zarówno są Command i Query, bo taka funkcja robi de facto dwie rzeczy - zmienia stan i go zwraca. Nie można wywołać 2x taką metodę aby pobrać stan, gdyż za każdym wywołaniem ten stan jest zmieniany.

Związek typu metod z zaślepkami:

  1. Mocki można stosować do zaślepiania metod typu Command, ale nie powinno się stosować do zaślepiania metod typu Query (są wyjątki)
  2. Stuby można stosować do zaślepiania metod typu Query, ale nie należy stosować do zaślepiania metod typu Command
  3. Fake można stosować do zaślepiania metod typu Query i Command

Krótkie wyjaśnienie aby nie było zamętu:

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

Autor wpisu: matipl, dodany: 19.12.2014 11:08, tagi: php

PHP - logo

Nowy miesiąc to nowe, poprawione wersje PHP. Te osoby, które jeszcze tego nie zrobiły powinny zacząć myśleć o przesiadce na PHP 5.6, którego pierwszą wersję ujrzeliśmy w sierpniu tego roku.

Przed ukazaniem się PHP 5.6.0 prosiłem Was, abyście wstrzymali się przynajmniej do drugiej wersji poprawkowej zanim zechcecie użyć produkcyjnie nowej gałęzi. Wczoraj ukazał się już czwarty zestaw poprawek (PHP 5.6.4), a załatane błędy są bliźniacze do tych z poprzedniej linii – PHP 5.5.20.

A jakie błędy poprawiono w PHP 5.5 i 5.6? Główne poprawki miały miejsce w jądrze i części odpowiedzialnej za FPM (FastCGI Process Manager).

Z punktu widzenia bezpieczeństwa 2 najważniejsze bug fixy to:

  • NULL pointer dereference in unserialize.c (info)
  • Use after free vulnerability in unserialize() (CVE-2014-8142) (info)

Z punktu widzenia głupoty należy zauważyć, że we wcześniejszych wersjach unset($this) wewnątrz metody obiektu aż od wersji PHP 5.3.0 mógł powodować zgon PHP (info). Dla mnie natomiast najbardziej interesujące poprawki znalazły się w FPM. Niestety z powodu różnych regresji (#68423) nie instalowałem nigdzie wersji PHP 5.5.19, za to 5.5.20 hula aż miło.

Na koniec należy zauważyć, że do PHP 5.4 (5.4.36) trafiły wspomniane wyżej dwie poprawki bezpieczeństwa. Jeśli musicie gdzieś nadal używać tej gałęzi pora na małą aktualizację.

A Wy jakiej wersji używacie?

Autor wpisu: Piotr Śliwa, dodany: 15.12.2014 19:59, tagi: php

Napisałem prosty plugin do PhpStorma (w wersji od 8.0.2 wzwyż, więc nie obijajcie się z aktualizacją). Jest on zatytuowany PHP Composer AutoCompletion, jak sama nazwa wskazuje, dodaje on podpowiadanie składni do pliku composer.json. Działa podpowiadanie struktury pliku oraz nazw paczek wraz z wersjami (tylko z packagist.org).

Issue na bugtrakerze PhpStorma z pomysłem tego ficzera wisi od ponad 2 lat...

Plugin w obecnej wersji ma minimalny zbiór funkcjonalności. Z czasem będą dodawane kolejne rzeczy, takie jak ulepszony autocomplete wersji paczek (wildcary, zakresy itp.), walidacja schematu i podkreślanie błędów, inspekcje, wyświetlanie obecnie zainstalowanej wersji (z composer.lock), wykrywanie dodanych paczek i ich instalowanie, optymalizacja całości.

Kod źródłowy można znaleźć na githubie, jak się podoba, to zainstalowanie i ocenienie będzie mile widziane.

Plugin w akcji:

Podgląd

Autor wpisu: batman, dodany: 10.12.2014 08:00, tagi: php

Dzisiejszy wpis rozpoczyna serię "Paczka tygodnia", w której opisywane będą paczki (głównie do Laravela) usprawniające prace nad projektami. Nową serię inauguruje Laravel IDE Helper Generator - narzędzie, dzięki któremu IDE będzie pokazywało podpowiedzi dla kodu frameworka oraz utworzonych przez nas modeli.

Jedną z niewielu rzeczy jakie mi przeszkadzają podczas tworzenia aplikacji opartych o Laravela, to brak podpowiadania składni dla fasad oferowanych przez ten framework. Powoduje to, że za każdym razem muszę sięgać do dokumentacji, aby przypomnieć sobie jakie parametry przyjmowała dana metoda lub jakie w ogóle metody są dostępne. Dzięki Laravel IDE Helper Generator problem ten przestał istnieć.

Paczkę zainstalujemy poleceniem

composer require barryvdh/laravel-ide-helper

Po zainstalowaniu musimy w pliku app/config/app.php dodać ServiceProvidera

'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider'

Od teraz możemy korzystać z nowego polecenia dostępnego z poziomu php artisan

php artisan ide-helper:generate

Należy pamiętać żeby przed uruchomieniem tego polecenia, wyczyścić plik bootstrap/compiled.php. Zrobimy to poleceniem

php artisan clear-compiled

Ciekawie prezentuje się możliwość wygenerowania dokumentacji phpDoc do utworzonych przez nas modeli, dzięki czemu będziemy mieli dostęp do nazw kolumn znajdujących się w bazie. Jeśli chcemy skorzystać z generowania dokumentacji dla modeli, musimy wpierw zainstalować w projekcie zależność w postaci doctrine/dbal: ~2.3. Po spełnieniu tego warunku możemy przystąpić do generowania dokumentacji naszych modeli.

php artisan ide-helper:models Post

Nie są to jedyne możliwości jakie daje ta paczka. Więcej na jej temat przeczytacie na stronie projektu.

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.