Po roku rozwoju przedstawione wydanie języka programowania PHP 7.4. Nowa gałąź zawiera szereg nowych funkcji, a także kilka zmian psujących kompatybilność.
Wpisane właściwości - właściwości klasy mogą teraz zawierać deklaracje typów, na przykład:
użytkownik klasy {
publiczny int $id;
ciąg publiczny $nazwa;
}
W skrócie składnia do definiowania funkcji „fn(lista_parametrów) => wyrażenie” z powiązaniem zakresu według wartości. Na przykład „fn($x) => $x + $y” jest analogiczne do „$fn2 = funkcja ($x) użycie ($y) {return $x + $y;}”);
Skrócony operator przypisania „??=", którego można użyć do zdefiniowania wartości domyślnej („a ??= b” jest podobne do „a = a ?? b”, jeśli „a” jest zdefiniowane, jego wartość jest przechowywana, a jeśli nie jest zdefiniowana, ma przypisaną wartość „b” );
Ograniczony okazja zachowanie hierarchii dziedziczenia typów w pochodnych typach zwracanych lub możliwość odwrócenia hierarchii pierwotnych typów w pochodnych typach argumentów (kowariancja typ zwracany i kontrawariancja typu argumentu). W PHP można teraz używać następujących konstrukcji:
klasa A {}
klasa B rozszerza A {}
klasa Producent {
metoda funkcji publicznej(): A {}
}
klasa DzieckoProducer rozszerza Producent {
metoda funkcji publicznej(): B {}
}
Operator rozpakowywania wewnątrz tablic „…$var”, pozwalać wykonać podstawienie istniejących tablic podczas definiowania nowej tablicy;
Okazja wizualna reprezentacja dużych liczb z ogranicznikami w literałach numerycznych (1_000_000_00);
Wsparcie słabe linki, które pozwalają zachować odniesienie do obiektu, ale nie blokują modułu zbierającego elementy bezużyteczne usunięcia skojarzonego obiektu;
nowy mechanizm serializacja obiektów (połączenie Serializable i __sleep()/__wakeup()), która zastąpiła interfejs Serializable, który będzie przestarzały;
// Zwraca tablicę zawierającą wszystkie stany obiektu;
funkcja publiczna __serialize(): tablica;
// Przywraca stan obiektu z tablicy
funkcja publiczna __unserialize(tablica $dane): void;
Zezwolono na zgłaszanie wyjątków od metody __toString();
Dodano obsługę wstępnego ładowania pamięci podręcznej kodu wynikowego. Dodano parametr do ustawienia ładowanie wstępne opcache, za pomocą którego możesz określić skrypt PHP, który zostanie skompilowany i uruchomiony podczas uruchamiania serwera. Ten skrypt może załadować kod operacji innych plików poprzez ich bezpośrednie włączenie lub użycie funkcji opcache_compile_file();
Dodano funkcję crc32c do rozszerzenia Hash w celu obliczenia sum kontrolnych przy użyciu wielomianu Castagnoli;
Dodano obsługę funkcji hasło_hash() dla metod mieszania haseł argon2i i argin2id w implementacji biblioteki Sodium, jeśli PHP jest zbudowane bez libargon;
Dodano funkcję mb_str_split(), podobną do str_split(), ale operującą nie bajtami, ale pozycjami znaków w ciągu wielobajtowym;
Funkcja strip_tags() ma teraz możliwość przekazywania tablicy z nazwami tagów, tj. zamiast strip_tags($str, ' ') możesz teraz określić strip_tags($str, ['a', 'p']);
proc_open() pozwala na wypisanie operandów w tablicy zamiast na uruchamianie ciągu znaków, a także zapewnia przekierowanie wątku i obsługę zerowego deskryptora pliku;
// Podobnie jak 2>&1 w powłoce
proc_open($cmd, [1 => ['potok', 'w'], 2 => ['przekierowanie', 1]], $potoki);
// jak 2>/dev/null lub 2>nul w powłoce
proc_open($cmd, [1 => ['potok', 'w'], 2 => ['null']], $potoki);
Rozszerzenia Firebird/Interbase, Recode i WDDX są wyłączone z podstawowej dystrybucji. Rozszerzenia te są obecnie dystrybuowane za pośrednictwem PECL;
Przeniesiono do kategorii przestarzały funkcje, takie jak zagnieżdżone operatory trójskładnikowe bez nawiasów, dostęp do elementów tablicy i ciągów znaków za pomocą nawiasów klamrowych („$var{$idx}”), funkcja is_real() i rzutowanie na wartość rzeczywistą, użycie słowa kluczowego nadrzędnego bez klasy nadrzędnej, konfiguracje parametru zezwolenie_url_include , używając array_key_exists() na obiektach.
Funkcje get_magic_quotes_gpc(), get_magic_quotes_runtime() i
hebrevc(), konwertuj_cyr_string(), money_format(), ezmlm_hash(), recovery_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().
Podczas próby przetworzenia nieprawidłowych symboli w funkcjach pojawiło się ostrzeżenie o użyciu przestarzałej funkcji
base_convert(), bindec(), octdec() i hexdec() oraz podczas określania wzorca innego niż ciąg znaków w mb_ereg_replace().