PHP 7.4 programming language release

Pagkatapos ng isang taon ng pag-unlad ipinakita paglabas ng programming language PHP 7.4. Kasama sa bagong sangay ang isang serye ng mga bagong feature, pati na rin ang ilang pagbabago na sumisira sa compatibility.

Susi mga pagpapabuti sa PHP 7.4:

  • Mga Na-type na Properties - Ang mga katangian ng klase ay maaari na ngayong magsama ng mga uri ng deklarasyon, halimbawa:

    User ng klase {
    pampublikong int $id;
    pampublikong string na $name;
    }

  • Dinaglat syntax para sa pagtukoy ng mga function na β€œfn(parameter_list) => expr” na may scope binding ayon sa value. Halimbawa, ang β€œfn($x) => $x + $y” ay kahalintulad ng β€œ$fn2 = function ($x) use ($y) {return $x + $y;}”);
  • Operator ng pagtatalaga ng shorthand "??=" na maaaring gamitin upang tukuyin ang isang default na halaga ("a ??= b" ay katulad ng "a = a ?? b", kung ang "a" ay tinukoy ang halaga nito ay nakaimbak, at kung hindi tinukoy ito ay itinalaga ang halaga "b" );
  • Limitado pagkakataon pinapanatili ang inheritance hierarchy ng mga uri sa mga derived return type, o ang kakayahang baligtarin ang hierarchy ng mga orihinal na uri sa derived na mga uri ng argument (covariance uri ng balik at uri ng argumento contravariance). Ang mga sumusunod na konstruksyon ay magagamit na ngayon sa PHP:

    klase A {}
    pinalawak ng class B ang A {}

    Producer ng klase {
    paraan ng pampublikong function(): A {}
    }
    class ChildProducer extends Producer {
    paraan ng pampublikong function(): B {}
    }

  • Pag-unpack ng operator sa loob ng mga arrays na β€œβ€¦$var”, nagpapahintulot magsagawa ng pagpapalit ng mga umiiral na array kapag tumutukoy ng bagong array;

    $parts = ['mansanas', 'peras'];
    $fruits = ['saging', 'orange', …$parts, 'pakwan'];
    // ['saging', 'orange', 'mansanas', 'peras', 'pakwan'];

  • Pagkakataon visual na representasyon ng malalaking numero na may mga delimiter sa mga literal na numero (1_000_000_00);
  • Suporta mahinang mga link, na nagbibigay-daan sa iyong panatilihin ang isang reference sa isang bagay, ngunit huwag hadlangan ang kolektor ng basura mula sa pagtanggal ng nauugnay na bagay;
  • Bago mekanismo object serialization (isang kumbinasyon ng Serializable at __sleep()/__wakeup()), na pumalit sa Serializable interface, na hindi na gagamitin;

    // Nagbabalik ng array na naglalaman ng lahat ng estado ng object;
    pampublikong function __serialize(): array;

    // Ibinabalik ang estado ng isang bagay mula sa isang array
    pampublikong function __unserialize(array $data): void;

  • Pinapayagan na magtapon ng mga pagbubukod mula sa isang paraan __toString();
  • Nagdagdag ng suporta para sa preloading ng object code cache. Nagdagdag ng parameter para sa setting
    opcache.preload, kung saan maaari kang tumukoy ng PHP script na isasama at tatakbo kapag nagsimula ang server. Maaaring i-load ng script na ito ang opcode ng iba pang mga file sa pamamagitan ng direktang pagsasama nito o gamit ang opcache_compile_file() function;

  • Idinagdag ang crc32c function sa Hash extension upang kalkulahin ang mga checksum gamit ang Castagnoli polynomial;
  • Nagdagdag ng suporta sa password_hash() function para sa password hashing method argon2i at argin2id, sa pagpapatupad ng Sodium library, kung ang PHP ay binuo nang walang libargon;
  • Nagdagdag ng function na mb_str_split(), katulad ng str_split(), ngunit hindi gumagana gamit ang mga byte ngunit may mga posisyon ng character sa isang multi-byte na string;
  • Ang function na strip_tags() ay may kakayahang magpasa ng array na may mga pangalan ng tag, ibig sabihin. sa halip na strip_tags($str, ' ') maaari mo na ngayong tukuyin ang strip_tags($str, ['a', 'p']);
  • pinapayagan ng proc_open() ang mga operand na mailista sa isang array, sa halip na isang string na tumakbo, at nagbibigay din ng thread redirection at suporta para sa isang null file descriptor;

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

    // Tulad ng 2>&1 sa shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

    // tulad ng 2>/dev/null o 2>nul sa shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Ang mga extension ng Firebird/Interbase, Recode at WDDX ay hindi kasama sa pangunahing pamamahagi. Ang mga extension na ito ay ipinamamahagi na ngayon sa pamamagitan ng PECL;
  • Inilipat sa kategorya lipas na sa panahon mga feature gaya ng mga nested ternary operator na walang panaklong, pag-access sa mga elemento ng array at string gamit ang curly braces (β€œ$var{$idx}”), ang is_real() function at pag-cast sa real, gamit ang parent na keyword na walang parent class, parameter allow_url_include configurations , gamit ang array_key_exists() sa mga bagay.

    Ang mga function get_magic_quotes_gpc(), get_magic_quotes_runtime(), at
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Isang babala tungkol sa paggamit ng isang hindi na ginagamit na feature ay ibinigay kapag sinusubukang iproseso ang mga maling simbolo sa mga function.
    base_convert(), bindec(), octdec() at hexdec(), at kapag tumutukoy ng non-string pattern sa mb_ereg_replace().

Pinagmulan: opennet.ru

Magdagdag ng komento