Autor wpisu: matipl, dodany: 25.06.2013 17:45, tagi: php
Jeśli ktoś uważał, że język PHP nie rozwija się, wegetuje… Był w błędzie. Tylko 15 miesięcy zajęło developerom wydanie stabilnego następcy wersji PHP 5.4.
A zmian, nowości oraz ewolucji nie brakuje w wersji PHP 5.5.
Opcode cache wbudowane!
Po tylu latach używania różnych alternatyw (w moim wypadku APC – czy warto korzystać?) doczekaliśmy się w końcu wbudowanego Opcode cache. Dokładniej to Zend Optimizer+ został wbudowany w jądro PHP 5.5.0. Można powiedzieć, że dzięki temu zabiegowi PHP bardzo przyspieszyło – sporo osób nie wiedziało o Opcode cache, lub nie radziło sobie z jego instalacją. Prawdopodobnie dla zwykłego programisty wrażenie jakie odniesienie po instalacji PHP 5.5 będzie niesamowite przyspieszenie działania PHP. A reszta może zapomnieć o dodatkowej instalacji APC, lub pilnowania aktualności wersji tej paczki PECL. Przykładowa konfiguracja Opcode w php.ini:
opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
Constant dereferencing
To jest jedna z tych rzeczy, na którą czekałem. Bardzo wiele razy trzeba było tworzyć zmienną, by móc odwołać się do n-tego elementu lub znaku. Nigdy więcej
echo "Hello"[3]; // wynik: 'l' echo [1,2,3,4][2]; // wynik: '3'
List w foreach
Do tej pory sposób korzystania z list() był delikatnie mówiąc – brzydki. Było to bardzo nielogiczna operacja moim zdaniem i z niej nie korzystałem. Od nowej wersji natomiast możemy skorzystać z tej funkcji bezpośrednio w wywołaniu foreach. Przykład z wiki RFC:
$users = [ ['Foo', 'Bar'], ['Baz', 'Qux'], ]; foreach ($users as list($firstName, $lastName)) { echo 'First name: ' . $firstName . ', last name: ' . $lastName . PHP_EOL; }
Słowo kluczowe finally
W końcu finally można dodać do bloku try…catch i mamy gwarancję, że dany fragment zostanie zawsze wykonany. Do tej pory wyglądało to tak, że używaliśmy pięknej obiektówki, a później nagle trach fragment znikąd, w którym czyściliśmy niektóre operacje lub robiliśmy przekierowanie – nigdy więcej.
try { $person = new Person(); if(!$person) { throw new Exception(); } } catch (Exception $e) { // Handle exception } finally { Redirect::url('/'); }
Password Hashing API
W końcu nie musimy samemu tworzyć funkcji hashujących dla haseł, ani martwić się czy użyty algorytm jest odpowiednio dobry. Od teraz mamy do dyspozycji wbudowaną funkcję hashującą password_hash oraz funkcję sprawdzającą poprawność hasha password_verify. Domyślny algorytm to bcrypt, który generuje hash 60 znakowy. Przykład:
$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT); if (password_verify('rasmuslerdorf', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; }
Generatory
Generatory mają nam ułatwić tworzenie przeróżnych iteratorów. Tworzy się je jak normalne funkcje, ale nie używa się słowa return. Zamiast return w generatorze używamy field w następujący sposób:
function daysOfTheYear() { $year = date('Y'); $current = new DateTimeImmutable($year . '-01-01'); do { yield $current; $current = $current->modify('+1 day'); } while ($current->format('Y') === $year); } foreach(daysOfTheYear() as $dt) { // ... }
Widzicie jakie to proste? Można powiedzieć, że w yield odkładają nam się kolejne wartości dopóki funkcja nie przestanie działać. Taki generator zwraca nam najzwyklejszą tablicę.
Dodatkowo zaktualizowano GD do wersji 2.1, empty() może przyjmować dowolne wartości (również bool) oraz wprowadzono wiele usprawnień.