Zmiany w PHP 7.1
: 30 cze 2016, 2:47
Niedawno miała premierę druga odsłona alphy PHP 7.1.
Zmian jest sporo, a jeszcze więcej jest w trakcie debaty do zaimplementowania (RFC), całą listę można zobaczyć tutaj: https://wiki.php.net/rfc
Skupiając się jednak nad tym, co już wiadomo i co będzie w PHP 7.1:
Łapanie wielu wyjątków
Aktualnie żeby złapać parę wyjątków, przy czym niektóre z nich będą tak samo przechwytywane, musimy robić coś w tym stylu:
Wraz z PHP 7.1, powyższa forma została skrócona
Wsparcie dla nadawania widoczności stałych
Standardowo, wszystkie stałe const z klasy są publiczne i nic z tym nie można zrobić.
PHP 7.1 umożliwia nam ustawienie widoczności dla nich.
Void jako zwracany typ
Od wersji PHP 7, mamy możliwość dla każdej metody ustawić wartość która ma być zwracana, przykładowo:
Powyższa metoda musi zwrócić wartość boolean, w innym przypadku nastąpi TypeError.
W PHP 7.1 dodano nowy typ: void
Wsparcie dla negatywnych wartości w wielu funkcjach do obsługi tekstu
Przykładowo w natywnej funkcji PHP:
Mamy możliwość dodania negatywnej wartości do zmiennej $offset, ale już w funkcji strpos() nie możemy w zmiennej $offset używać wartości negatywnych co prowadziło do wykorzystywania funkcji substr() aby ten problem rozwiązać, co było mało czytelne i źle odbijało się na wydajności.
PHP 7.1 ma to zmienić i do wielu natywnych funkcji do manipulacji stringami pojawi się zmienna $offset z możliwością ustawienia negatywnej wartości.
Usprawnienia list()
Aktualnie jest możliwa zmiana tablicy do zmiennych, niestety, list() wspiera tylko numeryczny index tablicy, czyli coś takiego będzie działać:
Ale tablica w tej formie (z ustalonymi kluczami), już nie będzie działać:
W PHP 7.1 możemy już zrobić coś takiego:
Kolejnym usprawnieniem przy destrukcji tablic, jest alternatywa dla list() w formie nawiasów kwadratowych (czyli tych samych, których używamy do tworzenia tablicy):
Informacja o złej składni arytmetycznej
Aktualnie, możemy pomieszać wartości integer ze stringami, dodać je ze sobą, a PHP i tak zwróci wynik:
Zwróci wynik 8.
PHP 7.1 też zwróci taki wynik, ale wygeneruje też błąd Notice:
Oznaczenie funkcji mcrypt() jako przestarzałej i usunięcie jej
W PHP 7.1 wszystkie funkcje mcrypt_* zostają oznaczone jako przestarzałe (E_DEPRECATED) i zostaną całkowicie usunięte w wersji 7.1+1.
Dobrą alternatywą dla niego jest openssl.
Jeżeli nie macie środowiska z PHP 7.1, możecie przetestować nowości na tej stronie: https://3v4l.org
Zmian jest sporo, a jeszcze więcej jest w trakcie debaty do zaimplementowania (RFC), całą listę można zobaczyć tutaj: https://wiki.php.net/rfc
Skupiając się jednak nad tym, co już wiadomo i co będzie w PHP 7.1:
Łapanie wielu wyjątków
Aktualnie żeby złapać parę wyjątków, przy czym niektóre z nich będą tak samo przechwytywane, musimy robić coś w tym stylu:
Kod: Zaznacz cały kod
try {
// ...
} catch (Exception $e) {
// ...
} catch (AnotherException $e) {
// będzie tak samo przechwytywany jak ten powyżej
} catch (RuntimeException $e) {
// ten już będzie robił coś innego
}
Wraz z PHP 7.1, powyższa forma została skrócona
Kod: Zaznacz cały kod
try {
// ...
} catch (Exception | AnotherException $e) {
// ...
} catch (RuntimeException $e) {
// ...
}
Wsparcie dla nadawania widoczności stałych
Standardowo, wszystkie stałe const z klasy są publiczne i nic z tym nie można zrobić.
PHP 7.1 umożliwia nam ustawienie widoczności dla nich.
Kod: Zaznacz cały kod
class ExampleClass
{
// stała domyślnie publiczna
const CONSTANT = true;
// stałe z ustawioną widocznością
private const CONSTANT_ONE = 1;
protected const CONSTANT_TWO = 2;
public const CONSTANT_THREE = 3;
}
Void jako zwracany typ
Od wersji PHP 7, mamy możliwość dla każdej metody ustawić wartość która ma być zwracana, przykładowo:
Kod: Zaznacz cały kod
class ExampleClass
{
public function exampleMethod() : bool
{
// ...
}
}
Powyższa metoda musi zwrócić wartość boolean, w innym przypadku nastąpi TypeError.
W PHP 7.1 dodano nowy typ: void
Kod: Zaznacz cały kod
class ExampleClass
{
public function exampleMethod() : void
{
return; // wszystko ok
}
}
Kod: Zaznacz cały kod
class ExampleClass
{
public function exampleMethod() : void
{
return true; // błąd
}
}
Wsparcie dla negatywnych wartości w wielu funkcjach do obsługi tekstu
Przykładowo w natywnej funkcji PHP:
Kod: Zaznacz cały kod
strrpos ( string $haystack , string $needle [, int $offset = 0 ] )
Mamy możliwość dodania negatywnej wartości do zmiennej $offset, ale już w funkcji strpos() nie możemy w zmiennej $offset używać wartości negatywnych co prowadziło do wykorzystywania funkcji substr() aby ten problem rozwiązać, co było mało czytelne i źle odbijało się na wydajności.
Kod: Zaznacz cały kod
strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
If specified, search will start this number of characters counted from the beginning of the string. Unlike strrpos() and strripos(), the offset cannot be negative.
PHP 7.1 ma to zmienić i do wielu natywnych funkcji do manipulacji stringami pojawi się zmienna $offset z możliwością ustawienia negatywnej wartości.
Usprawnienia list()
Aktualnie jest możliwa zmiana tablicy do zmiennych, niestety, list() wspiera tylko numeryczny index tablicy, czyli coś takiego będzie działać:
Kod: Zaznacz cały kod
$array = ['monkey', 'tree', 'banana'];
list($monkey, $tree, $banana) = $array;
Ale tablica w tej formie (z ustalonymi kluczami), już nie będzie działać:
Kod: Zaznacz cały kod
$array = [
'name' => 'Joe',
'age' => 30
];
W PHP 7.1 możemy już zrobić coś takiego:
Kod: Zaznacz cały kod
list('name', 'age') = $array;
Kolejnym usprawnieniem przy destrukcji tablic, jest alternatywa dla list() w formie nawiasów kwadratowych (czyli tych samych, których używamy do tworzenia tablicy):
Kod: Zaznacz cały kod
[$a, $b, $c] = [1, 2, 3];
Informacja o złej składni arytmetycznej
Aktualnie, możemy pomieszać wartości integer ze stringami, dodać je ze sobą, a PHP i tak zwróci wynik:
Kod: Zaznacz cały kod
$sum = 'Cat has 4 legs' + 'Dog has 4 legs too';
Zwróci wynik 8.
PHP 7.1 też zwróci taki wynik, ale wygeneruje też błąd Notice:
Notice: A non well formed numeric string encountered in XXX.php on line YYY
Oznaczenie funkcji mcrypt() jako przestarzałej i usunięcie jej
W PHP 7.1 wszystkie funkcje mcrypt_* zostają oznaczone jako przestarzałe (E_DEPRECATED) i zostaną całkowicie usunięte w wersji 7.1+1.
Dobrą alternatywą dla niego jest openssl.
Jeżeli nie macie środowiska z PHP 7.1, możecie przetestować nowości na tej stronie: https://3v4l.org