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