Wydanie języka programowania PHP 7.4

Po roku rozwoju przedstawione wydanie języka programowania PHP 7.4Nowa gałąź zawiera szereg nowych funkcji, a także kilka zmian powodujących utratę kompatybilności.

Klucz ulepszenia w PHP 7.4:

  • Właściwości wpisane - 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;
    }

  • Skrócony 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;}”);
  • Operator przypisania skróconego "??=", 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 okazja 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 (kowariancja (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", pozwalać 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'];

  • Okazja prezentacja wizualna dużych liczb z separatorami w literałach liczbowych (1_000_000_00);
  • Wsparcie słabe ogniwa, które pozwalają zachować odwołanie do obiektu, ale nie blokują usuwania powiązanego obiektu przez zbieracza śmieci;
  • nowy mechanizm 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 __toString();
  • Dodano obsługę wstępnego ładowania pamięci podręcznej kodu obiektowego. Dodano parametr do konfiguracji.
    ładowanie wstępne opcache, 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 przestarzały 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

Dodaj komentarz