Vydání programovacího jazyka PHP 7.4

Po roce vývoje prezentovány vydání programovacího jazyka PHP 7.4. Nová větev obsahuje řadu nových funkcí a také několik změn, které narušují kompatibilitu.

Klíč vylepšení v PHP 7.4:

  • Typované vlastnosti - vlastnosti třídy mohou nyní zahrnovat deklarace typu, například:

    uživatel třídy {
    public int $id;
    veřejný řetězec $jméno;
    }

  • Zkráceno syntaxe pro definování funkcí „fn(seznam_parametrů) => expr“ s vazbou rozsahu podle hodnoty. Například „fn($x) => $x + $y“ je analogické k „$fn2 = funkce ($x) použití ($y) {return $x + $y;}“);
  • Operátor přiřazení těsnopisu "??=", které lze použít k definování výchozí hodnoty ("a ??= b" je podobné jako "a = a ?? b", pokud je definováno "a", jeho hodnota je uložena, a pokud není definována je přiřazena hodnota "b" );
  • Omezený příležitost zachování hierarchie dědičnosti typů v odvozených návratových typech nebo možnost obrátit hierarchii původních typů v odvozených typech argumentů (kovariance návratový typ a rozporuplnost typu argumentu). V PHP lze nyní použít následující konstrukce:

    třída A {}
    třída B rozšiřuje A {}

    class Producent {
    metoda veřejné funkce(): A {}
    }
    class ChildProducer extends Producer {
    metoda veřejné funkce(): B {}
    }

  • Operátor rozbalení uvnitř polí „…$var“, dovolující provést náhradu existujících polí při definování nového pole;

    $parts = ['jablko', 'hruška'];
    $fruits = ['banán', 'pomeranč', …$části, 'meloun'];
    // ['banán', 'pomeranč', 'jablko', 'hruška', 'vodní meloun'];

  • Příležitost vizuální znázornění velkých čísel s oddělovači v číselných literálech (1_000_000_00);
  • Podpora slabé články, které umožňují zachovat odkaz na objekt, ale nebrání sběrači odpadků ve smazání přidruženého objektu;
  • Nový strojů serializace objektů (kombinace Serializable a __sleep()/__wakeup()), která nahradila Serializable rozhraní, které bude zastaralé;

    // Vrátí pole obsahující všechny stavy objektu;
    veřejná funkce __serialize(): pole;

    // Obnoví stav objektu z pole
    veřejná funkce __unserialize(pole $data): void;

  • Povoleno vyvolávat výjimky z metody __toString();
  • Přidána podpora pro předběžné načítání mezipaměti objektového kódu. Přidán parametr pro nastavení
    opcache.preload, pomocí kterého můžete určit PHP skript, který bude zkompilován a spuštěn při spuštění serveru. Tento skript může načíst operační kód jiných souborů prostřednictvím jejich přímého zahrnutí nebo pomocí funkce opcache_compile_file();

  • Přidána funkce crc32c do rozšíření Hash pro výpočet kontrolních součtů pomocí Castagnoliho polynomu;
  • Přidána podpora funkce password_hash() pro metody hašování hesel argon2i a argin2id v implementaci knihovny Sodium, pokud je PHP sestaveno bez libargonu;
  • Přidána funkce mb_str_split(), podobná str_split(), ale nepracuje s bajty, ale s pozicemi znaků ve vícebajtovém řetězci;
  • Funkce strip_tags() má nyní možnost předat pole s názvy značek, tzn. místo strip_tags($str, ' ') nyní můžete zadat strip_tags($str, ['a', 'p']);
  • proc_open() umožňuje, aby byly operandy uvedeny v poli, nikoli v řetězci, aby se spouštěly, a také poskytuje přesměrování vláken a podporu pro deskriptor null souboru;

    proc_open(['php', '-r', 'echo "Ahoj světe\n";'], $descriptors, $pipes);

    // Jako 2>&1 v shellu
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['přesměrování', 1]], $pipes);

    // jako 2>/dev/null nebo 2>nul v shellu
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Rozšíření Firebird/Interbase, Recode a WDDX jsou ze základní distribuce vyloučeny. Tato rozšíření jsou nyní distribuována prostřednictvím PECL;
  • Převedeno do kategorie zastaralý funkce, jako jsou vnořené ternární operátory bez závorek, přístup k prvkům pole a řetězcům pomocí složených závorek („$var{$idx}“), funkce is_real() a přetypování na real, pomocí nadřazeného klíčového slova bez nadřazené třídy, konfigurace parametru allow_url_include pomocí array_key_exists() na objektech.

    Funkce get_magic_quotes_gpc(), get_magic_quotes_runtime() a
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Při pokusu o zpracování nesprávných symbolů ve funkcích bylo poskytnuto varování o použití zastaralé funkce
    base_convert(), bindec(), octdec() a hexdec() a při zadávání neřetězcového vzoru v mb_ereg_replace().

Zdroj: opennet.ru

Přidat komentář