Co nowego w PHP v7.3? Opisaliśmy wszystkie 34 zmiany

13 grudnia zostanie udostępniona wersja produkcyjna PHP v7.3. Zmian jest naprawdę dużo, choć nie są rewolucyjne. Większość z nich to drobnostki, ale na pewno każdy znajdzie coś dla siebie. Wszystkie 34 aktualizacje postanowiłem opisać poniżej.


Damian Dziaduch. Absolwent Uniwersytetu Gdańskiego. Zawodowy programista z 7 letnim stażem. Aktualnie lider zespołu oraz specjalista od wydajności w GForces Polska. Po godzinach bloger (damian.dziaduch.pl) i freelancer. Lubi czysty kod, testowanie, wydajność, a także produktywność.


Spis treści

1. Elastyczna składnia HEREDOC / NOWDOC

Znacznik zamykający – nowa linia

Do tej pory, po znaku zamykającym wyrażenie, wymagana była nowa linia:

W nowej wersji nie ma już tego wymogu:

Wcięcie znacznika zamykającego

W aktualnej wersji PHP znacznik zamykający musi być na początku linii:

W nowej wersji całe wyrażenie HEREDOC / NOWDOC może być wcięte:

Co ważne, wcięcie znacznika zamykającego decyduje o ilości usuniętych białych znaków z łańcucha znaków:

Ja jestem bardzo zadowolony z tych zmian, często używam HEREDOC / NOWDOC np. do budowania zapytań SQL.

Uwaga na składnie nie kompatybilne z nową wersją

Jeśli w starym kodzie masz znacznik zamykający wewnątrz łańcucha znaków, może to spowodować błąd lub łańcuch zostanie źle zinterpretowany. W poniższym kodzie zostanie wyrzucony ParseError:

Przy tej zmianie radzę zweryfikować czy stary kod działa poprawnie. Polecam do tego Unit Testy.

Więcej w RFC: https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes.

2. Przecinek po ostatnim argumencie w wywołaniach funkcji / metod

Aktualnie możemy zostawić przecinek po ostatnim elemencie w tablicy oraz w grupowanych namespace. W nowej wersji możemy przecinek zostawić po ostatnim argumencie w wywołaniach:

Co ważne, dotyczy to tylko wywołań a nie deklaracji!

Jeśli dbasz o ładną historię w systemie kontroli wersji, to na pewno będziesz zadowolony.

Więcej informacji:

3. Wsparcie referencji w list()

Używając operatora list() nie mogłeś użyć referencji. Teraz jest to możliwe:

Kod jest poprawny i działa jak należy w v7.3.

Więcej informacji:

4. json_encode() i json_decode() – rzucanie wyjątków

Gdy wywołasz json_decode() z niepoprawnym JSON funkcja zwróci null. Co ciekawe, gdy wywołasz ją z poprawnym JSON, który zawiera tylko null, funkcja również zwróci null. Jedyną metodą, by sprawdzić czy wystąpił błąd podczas dekodowania jest odwołanie się do funkcji json_last_error() lub json_last_error_msg().

W v7.3 to się zmieni. Ekipa PHP wprowadziła flagę JSON_THROW_ON_ERROR, dzięki której funkcja json_encode() oraz json_decode() będą rzucać wyjątek JsonException, gdy coś pójdzie nie tak. Co ważne, kod wyjątku będzie zgodny z kodem zwracanym przez funkcję json_last_error(), a wiadomość zgodna z wiadomością zwracaną przez json_last_error_msg().

Więcej informacji:

5. Nowa funkcja is_countable()

W wersji v7.2 dodano Warning które jest wyrzucany podczas próby wywołania count() na czymś co nie jest policzalne, np. na instancji stdClass. By temu zapobiec należy zweryfikować czy rzecz jest policzalna, jednak nie było do tego odpowiedniej funkcji, więc warunek jest złożony:

W v7.3 wystarczy użyć is_countable():

Więcej informacji:

6. Nowe funkcje array_key/value_first/last()

Funkcje te zostały dodane by ułatwić uzyskiwanie kluczy i wartości ostatniego i pierwszego elementu z tablicy. W v7.2 trzeba modyfikować wewnętrzny wskaźnik tablicy używając np. end() / current():

W v7.3 możesz użyć dedykowanych funkcji do tego, co ważne, nie zmieniają wskaźnika wewnątrz tablicy:

Więcej informacji:

7. Nowa funkcja do haszowania haseł – Argon2id

Algorytm Argon2 ma trzy odmiany:

  • Argon2i,
  • Argon2d,
  • Argon2id.

Ta ostatnia jest teraz zalecaną odmianą w wersji roboczej specyfikacji IEFT. W nowej wersji zostaje wsparcie poprzez funkcje password_* oraz stałą PASSWORD_ARGON2ID:

Więcej informacji:

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Eksperci LinkedIna, Slacka, Mozilli i Microsoftu na tegorocznym Infoshare 2019