Po roku rozwoju wydanie języka programowania Nowa gałąź zawiera szereg nowych funkcji, a także kilka zmian powodujących utratę kompatybilności.
Klucz w PHP 7.4:
- - właściwości klasy mogą teraz zawierać deklaracje typu, na przykład:
Klasa Użytkownika {
publiczna int $id;
publiczny ciąg znaków $name;
} - Składnia definicji funkcji „fn(parameter_list) => expr” z powiązaniem zakresu przez wartość. Na przykład „fn($x) => $x + $y” jest analogiczne do „$fn2 = function ($x) use ($y) {return $x + $y;}”);
- "??=", 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ść zostaje zachowana, a jeśli nie jest zdefiniowane, przypisywana jest wartość "b");
- Ograniczony zachowanie hierarchii dziedziczenia typów w typach wartości zwracanych z nich pochodnych lub możliwość przekształcenia hierarchii typów oryginalnych na przeciwną w typach pochodnych argumentów ( (kontrawariancja typu zwracanego i typu argumentu). W PHP można teraz używać następujących konstrukcji:
klasa A {}
klasa B rozszerza A {}klasa Producent {
publiczna metoda funkcji(): A {}
}
klasa ChildProducer rozszerza Producer {
publiczna metoda funkcji(): B {}
} - Rozpakowywanie operatora wewnątrz tablic "...$var", wykonaj podstawienie istniejących tablic podczas definiowania nowej tablicy;
$parts = ['jabłko', 'gruszka'];
$fruits = ['banan', 'pomarańcza', …$parts, 'arbuz'];
// ['banan', 'pomarańcza', 'jabłko', 'gruszka', 'arbuz']; - prezentacja wizualna dużych liczb z separatorami w literałach liczbowych (1_000_000_00);
- Wsparcie , które pozwalają zachować odwołanie do obiektu, ale nie blokują usuwania powiązanego obiektu przez zbieracza śmieci;
- nowy serializacja obiektów (kombinacja Serializable i __sleep()/__wakeup()), zastępująca interfejs Serializable, który zostanie uznany za przestarzały;
// Zwraca tablicę zawierającą wszystkie stany obiektu;
funkcja publiczna __serialize(): tablica;// Przywraca stan obiektu z tablicy
funkcja publiczna __unserialize(tablica $data): void; - Dozwolone jest zgłaszanie wyjątków z metody ;
- Dodano obsługę wstępnego ładowania pamięci podręcznej kodu obiektowego. Dodano parametr do konfiguracji.
, za pomocą którego można określić skrypt PHP, który zostanie skompilowany i uruchomiony podczas startu serwera. Skrypt ten może załadować kod operacji innych plików poprzez ich bezpośrednie dołączenie lub za pomocą funkcji opcache_compile_file(); - Rozszerzenie Hash ma nową funkcję crc32c do obliczania sum kontrolnych przy użyciu wielomianu Castagnoliego;
- Funkcja password_hash() została zaktualizowana w celu obsługi metod haszowania haseł argon2i i argin2id w implementacji biblioteki Sodium, jeśli PHP zostało skompilowane bez libargon;
- Dodano funkcję mb_str_split(), podobną do str_split(), ale działającą nie na bajtach, lecz na pozycjach znaków w ciągu wielobajtowym;
- Funkcja strip_tags() może teraz przekazać tablicę z nazwami tagów, tzn. zamiast strip_tags($str, ' ') można teraz określić strip_tags($str, ['a', 'p']);
- proc_open() pozwala na wylistowanie operandów w tablicy zamiast określania ciągu znaków do uruchomienia, a także implementuje możliwość przekierowywania strumieni i obsługuje pusty deskryptor pliku;
proc_open(['php', '-r', 'echo "Witaj świecie\n";'], $descriptors, $pipes);
// Jak 2>&1 w powłoce
proc_open($cmd, [1 => ['rura', 'w'], 2 => ['przekierowanie', 1]], $pipes);// jak 2>/dev/null lub 2>nul w powłoce
proc_open($cmd, [1 => ['rura', 'w'], 2 => ['null']], $pipes); - Rozszerzenia Firebird/Interbase, Recode i WDDX zostały usunięte z dystrybucji podstawowej. Są one teraz dystrybuowane za pośrednictwem PECL;
- Przeniesiono do kategorii Funkcje takie jak zagnieżdżone operatory trójargumentowe bez nawiasów, dostęp do elementów tablic i ciągów znaków za pomocą nawiasów klamrowych ("$var{$idx}"), funkcja is_real() i rzutowanie na real, używanie słowa kluczowego parent bez klasy nadrzędnej, opcja konfiguracji allow_url_include i używanie array_key_exists() na obiektach.
Funkcje get_magic_quotes_gpc() i get_magic_quotes_runtime() zostały uznane za przestarzałe.
hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().Wyświetlono ostrzeżenie o użyciu przestarzałej funkcji podczas próby przetworzenia nieprawidłowych znaków w funkcjach
base_convert(), bindec(), octdec() i hexdec() oraz podczas określania wzorca niebędącego ciągiem znaków w mb_ereg_replace().
Źródło: opennet.ru
