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

Autor wpisu: Piotr Śliwa, dodany: 07.09.2014 23:05, tagi: php

Obiekty* są fajne, dzięki nim można zrobić miłe w użyciu api. Obiekty są fajne, bo dają nam narzędzia do reużywalności kodu. Obiekty są fajne przede wszystkim dlatego, bo dają nam możliwość ukrywania implementacji i hermetyzacji danych.

PHP to przede wszystkim język dwuparadygmatowy, powstał jako język strukturalny. Następnie dodano do niego bardzo kulawe wsparcie do programowania obiektowego (PHP4), które naprostowano w PHP5. Kolejnym krokiem było dodanie trochę mniej kulawego wsparcia dla domknięć (Closure) w PHP 5.3, które częściowo zostało naprostowane w PHP 5.4.

Ale lepszy rydz niż nic. Ten rydz nie jest taki zły, dzięki niemu programowanie funkcyjne w PHP jest łatwiejsze i faktycznie ma sens.

A o co chodzi?

Nie chcę sypać tutaj definicjami, ale absolutne minimum musi być. W programowaniu funkcyjnym funkcja jest obywatelem pierwszej kategorii - to znaczy że można ją przypisać do zmiennej, wykonywać operacje na niej, przekazywać funkcje jako parametr do funkcji itp. Analogicznie do obiektu w OOP - można przypsać obiekt do zmiennej, wywołać jakąś metodę na nim i przekazać ten obiekt jako argument do jakieś metody / funkcji. W php przypisanie do zmiennej i przekazanie jako parametr można zrealizować tak:

//przypisanie do zmiennej
$removeDigits = function($s){
    return preg_replace('/\d/', '', $s);
};

//przekazanie jako argument
$words = array_map($removeDigits, ['śaJ123', '32i1', 'aisogłaM321']);

Jest to mały, prosty kawałek kodu zrealizowany w sposób funkcyjny: mamy dane na wejściu w postaci tablicy stringów, a następnie jest wywołana funkcja, która korzystając z innego parametru (funkcji $removeDigits), wywołuje operacje na danych wejściowych. Kod ten oczywiście można zrealizować w sposób strukturalny:

$words = array();
foreach(['śaJ123', '32i1', 'aisogłaM321'] as $word) {  
    $words[] = preg_replace('/\d/', '', $word);
}

Obiektowo również:

class Word {  
    private $word;
//... 50 lini później

$firstChars = $stringCleaner->clean([new Word('śaJ123'), new Word('32i1'), new Word('aisogłaM321')]);

Jak widać, obiekty nie wszędzie pasują... ;)

Operacje na funkcjach

W powyższym przykładzie nie pokazałem w jaki sposób można operować na funkcjach - trzeba nadrobić zaległości. Wyobraźmy sobie, że nie dość że chcemy usunąć cyfry, to jeszcze chcemy odwrócić każdy wyraz (za pomocą np. strrev).

$removeDigits = function($s){
    //dodane strrev
    return strrev(preg_replace('/\d/', '', $s));
};

$words = array_map($removeDigits, ['śaJ123', '32i1', 'aisogłaM321']);

Ok, nazwa $removeDigits już nie jest aktualna, nowa nazwa będzie wymagała zastosowanie operatora logicznego && - to jest zapach że funkcja ma więcej niż jedną odpowiedzialność.

Jak przyjrzymy się bliżej i jeśli uważaliśmy na analizie matematycznej, to zauważymy operację zwaną składaniem funkcji.

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

Autor wpisu: Kamil Adryjanek, dodany: 01.09.2014 10:27, tagi: php

A couple of days ago the PHP Development Team have introduced the new PHP 5.6.0 version. This major release comes with some nice new features, some backward incompatible changes and many improvements. Full list of improvements with details can be found on php.net.

Post PHP 5.6 is here! pojawił się poraz pierwszy w Kamil Adryjanek.

Autor wpisu: matipl, dodany: 25.08.2014 16:24, tagi: php

php-logoJuż w najbliższy czwartek będziemy mogli cieszyć się stabilną wersją PHP 5.6. Mam nadzieję, że będzie stabilna, ale na Waszym miejscu wstrzymałbym się przynajmniej do wersji PHP 5.6.2 zanim zaczniecie korzystać z niego produkcyjnie.

W stosunku do wersji PHP 5.5.* jest tylko niewielki brak kombatybilności wstecznej, który w 98% przypadków nie powinien dotyczyć Waszego kodu.

Zalet jest o wiele więcej, szczególnie porządku w języku oraz delikatnego przyspieszenia wykonywania kodu. Najbardziej cieszą dwie zmiany:

  • możliwość wielokrotnego korzystania z php://input podczas wykonywania kodu
  • możliwość importu tylko pojedynczej metody z klasy:
    use function MyClass\importMethod;
     
    importMethod();
    

Zatem czekamy…

Autor wpisu: zleek, dodany: 22.08.2014 08:48, tagi: php

Zend Framework 2 oferuje kilka różnych adapterów pozwalających na cache poszczególnych elementów, które chcemy składować w pamięci podręcznej. Poniżej przedstawię sposób konfiguracji cache opartego na systemie plików. Konfiguracja adaptera W pierwszym kroku musimy ustawić konfigurację adaptera, co dokonuje się w pliku Module.php danego modułu. Jak widać na początku tworzymy obiekt typu Zend\Cache\Storage\Adapter\Filesystem, dla którego następnie […]

Autor wpisu: matipl, dodany: 19.08.2014 07:29, tagi: php

php-logo

Musiał w końcu nadajeść ten dzień. Mimo, że jest cześć serwerów korzysta z PHP 5.3, a niektóre aplikacje mogą maksymalnie współpracować z PHP w wersji 5.2 to linia 5.3 została właśnie wstrzymana.

Ten fakt nie dziwi, obecnie rozwijane są 2 wersje stabilne:

A do tego lada dzień ujrzymy PHP 5.6, które w tej chwili jest dostępna już w wersji RC.

Z mojego doświadczenia wynika, że nie ma co się obawiać aktualizacji PHP 5.3 na nowszą linię. Mogą wyłącznie pojawić się problemy, gdybyście chcieli przejść z PHP 5.2 do PHP 5.3 lub nowszego. Niestety nie wszystkie aplikacje są w stanie sobie z tym poradzić i migracja wymaga nie tylko pracy administratora, ale również programisty.

Autor wpisu: zleek, dodany: 04.08.2014 09:44, tagi: php, zend_framework

Gdy tworzymy dokumenty z wykorzystaniem Zend_Pdf czasami wygodniej jest wykorzystać istniejący szablon w formacie pdf (będący np. papierem firmowym), niż budować cały dokument ręcznie. Zend Framework daje nam narzędzie, które pozwala szybko i bezproblemowo zamieścić nasz szablon na wszystkich stronach dokumentu. Można to zrobić nastepującym kodem: Powyżej znajduje się przykład dodanie pojedynczej strony wykorzystującej szablon. […]

Autor wpisu: matipl, dodany: 18.07.2014 16:49, tagi: php

Za kilka tygodni będziemy mogli się cieszyć w pełni stabilnym PHP 5.6. Tymczasem w kwietniu tego roku powstało odgałęzienie PHP o nazwie PHPNG (Next Generation).

Dmitry Stogov z Zenda 5 maja 2014 roku opublikował opis zasady działania PHPNG oraz małe porównanie szybkości w stosunku do PHP 5.5.

Ale czym dokładnie jest PHPNG? Dmitry od dłuższego czasu eksperymentował z silnikiem JIT (Just In Time compilation) wykorzystując LLVM (przypomnę, że w 2008 roku była już podobna próba i powstał PECL LLVM). Wbudowanie tego rozwiązania do OPCache przyspieszyło działanie aplikacji tylko o kilka procent (chociaż wynik w samym bench.php polepszył się 10x). Ta sytuacja pozwoliła zrozumieć, że naprawdę wąskie gardło jest gdzieś indziej. Zespół rozwijający PHPNG przeanalizował na co standardowa aplikacja PHP wykorzystuje zasoby CPU:

  • około 20% czasu CPU to memory manager
  • 10% poświęca na operacje związane z hashowaniem tabel
  • 30% czasu to funkcje wewnętrzne
  • oraz 30% to VM

Sam VM został już zoptymalizowany za pomocą powyższych hacków. Trzeba było zająć się optymalizacją działania pozostałych składowych, szczególnie alokacji pamięci. Dzięki tym zabiegom typowa aplikacja przyspieszyło o 20%. Tylko dzięki zmianie PHP 5.5 na PHPNG. Jak to wygląda w praktyce?

  • WordPress 3.6 – 20.0% szybszy (253 vs 211 req/sec)
  • Drupal 6.1 – 11.7% szybszy (1770 vs 1585 req/sec)
  • Qdig – 15.3% szybszy (555 vs 482 req/sec)
  • ZF test app – 30.5% szybszy (217 vs 166 req/sec)

PHPNG jest „prawie” stabilne, działa większość rozszerzeń. Jeśli macie chwilę możecie pobrać gałąź i skompilować (instrukcja). HHVM jest świetne w pewnych sytuacjach (chociaż nadal nie jest w pełni kompatybilny z ZF czy Symfony), ale musimy pamiętać że tworzy go firma zewnętrzna. Natomiast PHPNG jest rozwijane jako wewnętrzny projekt, i miejmy nadzieję że zostanie włączony do PHP 6.

Swoją drogą trwa obecnie dyskusja dotycząca nazewnictwa kolejnej dużej wersji PHP. Nie jest do końca pewne czy to będzie PHP6 (nazwa wałkowana od lat), czy nie lepiej przeskoczyć jeden numer i nazwać PHP 7.

PS: Stabilność aktualnie rozwijanej gałęzi (PHP 5.6) można sprawdzić na Travisie.

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