Wydanie języka programowania PHP 7.4

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ść.

Klucz ulepszenia w PHP 7.4:

  • 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;

    $części = ['jabłko', 'gruszka'];
    $owoce = ['banan', 'pomarańcza', ...$części, 'arbuz'];
    // ['banan', 'pomarańcza', 'jabłko', 'gruszka', 'arbuz'];

  • 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;

    proc_open(['php', '-r', 'echo "Hello World\n";'], $deskryptory, $pipes);

    // 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().

Źródło: opennet.ru

Dodaj komentarz