PHP 5.6 czeka za rogiem

php-logo

Już niebawem doczekamy się kolejnej wersji PHP. Na początku czerwca ukazała się ostatnia beta, tym samym zamknięto listę zmian funkcjonalnych. Przed nami już tylko wersje RC (Release Candidate).

Zmiany

Przede wszystkim wprowadzenie nowego operatora ** (do potęgi). Na pewno ułatwi to pisanie bardziej matematycznych aplikacji:

Od teraz kodowanie UTF-8 jest uznawane za domyślne w ramach całego PHP (default_charset). Dodatkowo kodowanie ustawione za pomocą default_charset będzie automatycznie ustawiało kodowanie dla funkcji związanych z kodowaniem, np. htmlspecialchars(). Ustawianie kodowania dla iconv/mbstring zostsało uznane jako przestrzałe i zobaczymy deprecated.

W PHP 5.6 możemy wielokrotnie korzystać w ramach wywołania aplikacji z php://input, od teraz nie jest czyszczone po pierwszym użyciu. Chciałoby się rzec, dlaczego tak późno?

Na pewno spora część z Was korzysta z GMP (GNU Multiple Precision). Wcześniej aby dodać 2 liczby musieliśmy skorzystać z gmp_add, obecnie wystarczy użyć operatora +, który został przeciążony.

Jeśli chodzi o sprawy bezpieczeństwa, to została dodana funkcja hash_equals(), która ma za zadanie porównać 2 zakodowane hasła zawsze w tym samym, stałym czasie. Dodano również obsługę algorytmu hashującego gost-crypto.
Dodatkowo została mocno rozwinięta obsługa SSL/TLS w PHP 5.6 (m.in. łagodzenie ataków renegocjacji TLS, obsługa certyfikatów fingerprint). Jest tego naprawdę sporo.

Porządki

Od pewnego czasu zespół developerów PHP stara się pozbyć starych, problematycznych funkcji czy rozwiązań. I tak wraz z wersją PHP 5.6 otrzymamy błąd E_DEPRECATED, tzn. że w przyszłości zostaną całkowicie usunięte z języka:

  • możliwość włączenie w php.ini dyrektywy always_populate_raw_post_data
  • tym samym zostanie usunięta możliwość korzystania z $HTTP_RAW_POST_DATA, w takim wypadku powinniśmy użyć php://input

To nie wszystko, zmieni się również zachowanie niektórych składowych języka:

  • json_decode jest bardziej restrykcyjny, tzn. w przypadku użycia True zamiast true, False zamiast false, czy Null zamiast null zostanie rzucony błąd
  • zasoby GMP od teraz są zawsze obiektami
  • funkcje mcrypt wymagają od teraz podania prawidłowego klucza i IV
  • domyślnie wszystkie kodowane streamingi mają teraz domyślnie włączoną weryfikację połączenia

Wydajność

LornaJane po wydaniu PHP 5.6 beta2 przeprowadziła kilka testów wydajności środowisk, od wersji 5.3 do 5.6. Wykorzystała do tego bench.php:

PHP 5.6 Performance

Oczywiście, jeśli nadal korzystacie z PHP 5.3 migrujcie. Jest odczuwalne spore przyspieszenie, do tego dobrze w PHP 5.5 skorzystać z wbudowanej funkcjonalności opcache.