Kutolewa kwa lugha ya programu ya PHP 8.4

Baada ya mwaka wa maendeleo, kutolewa kwa lugha ya programu ya PHP 8.4 iliwasilishwa. Tawi jipya linajumuisha mfululizo wa vipengele vipya, pamoja na mabadiliko kadhaa ambayo yanavunja utangamano.

Mabadiliko muhimu katika PHP 8.4:

  • Utekelezaji mpya wa mkusanyaji wa JIT, uliojengwa kwa misingi ya Mfumo wa IR, unapendekezwa. Tofauti kuu ni kwamba maagizo ya mashine ya zamani ya JIT yalizalisha moja kwa moja kwa msingi wa bytecode na kutumia backends tofauti kwa usanifu wa x86_64 na AArch64, wakati JIT mpya hutumia backend moja kwa usanifu wote na hutoa uwakilishi wa kati (IR), ambayo ni zaidi. iliyoboreshwa na kubadilishwa kuwa maagizo ya mashine kwa jukwaa lengwa unalotaka.
  • Usaidizi ulioongezwa wa kuambatisha ndoano za mali, kukuwezesha kuongeza mantiki ya ziada ambayo inatekelezwa wakati wa kubadilisha au kufikia sifa za kitu, kutekelezwa bila kuingilia shughuli za kusoma na kuandika kwa kutumia kazi za kawaida __get na __set, na bila kuunda mbinu za ziada za kumfunga. Matumizi ya watunzaji wa mali hufanya iwezekanavyo kupunguza kwa kiasi kikubwa kiasi cha msimbo na kurahisisha upya wa tabia ya kufanya kazi na mali, shukrani kwa kumfunga mhudumu wake kwa kila mali. class User { public string $name { set { if (strlen($value) === 0) { throw new ValueError("Jina lazima lisiwe tupu"); } $this->jina = $value; } } chaguo za kukokotoa za umma __construct(string $name) { $this->name = $name; }}
  • Inaruhusiwa kuonyesha marejeleo ya njia katika ujenzi "mpya" bila kutenganisha mabano, i.e. badala ya “$name = (new MyClass())->method()” sasa unaweza kubainisha “$name = new MyClass()->njia()”.
  • Aliongeza uwezo wa kudhibiti asymmetrically mwonekano wa mali ya kitu (ya umma, ya faragha, ya ulinzi), tofauti kwa kuandika (kuweka) na kusoma (kupata) shughuli. Kwa mfano: darasa PhpVersion { public private(set) string $version = '8.4'; } $phpVersion = PhpVersion mpya(); var_dump($phpVersion->toleo); // string(3) "8.4" $phpVersion->version = 'PHP 8.3'; // kosa
  • Imetoa usaidizi wa kawaida kwa vitu "vivivu", ambavyo vinaanzishwa wakati wa matumizi ya kwanza.
  • Badala ya kigezo cha jumla "opcache.jit_buffer_size", vigezo "opcache.jit" na "opcache.jit_buffer_size" vinapendekezwa kudhibiti kikusanyaji cha JIT na kusanidi saizi ya bafa ya JIT. Ili kuzima JIT, sasa unaweza kubainisha "opcache.jit=disable" badala ya "opcache.jit_buffer_size=0". Mabadiliko yamefanywa ili kupunguza matumizi ya kumbukumbu na kuboresha utendaji wa JIT katika hali fulani.
  • Imeongeza sifa ya "#[\Deprecated]" ili kuashiria vipengele vilivyoacha kutumika, darasa na mbinu. #[\Deprecated("tumia newFunction() badala yake", kwani: "1.1")] kazi oldFunction() { // ... }
  • Darasa la \Dom\HTMLDocument limetekelezwa, likisaidia uchanganuzi sahihi wa lebo ya HTML5.
  • Umeongeza utendakazi wa request_parse_body() ili kuchanganua maombi ya HTTP kwa aina ya maudhui ya data/form-data (RFC1867).
  • Utendakazi ulioongezwa array_find(), array_find_key(), array_any() na array_all(). Array_find() na array_find_key() chaguo za kukokotoa hurejesha kipengele cha kwanza au ufunguo katika mkusanyiko ambao hundi iliyobainishwa kupitia chaguo za kukokotoa za urejeshaji simu zilizobainishwa na mtumiaji zilifanya kazi. Array_any() na array_all() kazi, kwa upande wake, hurejesha kipengele chochote kinacholingana na vipengele vyote vilivyolingana. Kwa mfano, ili kuonyesha kipengele cha kwanza ambacho sehemu yake ya kichwa ni kubwa kuliko herufi 5, unaweza kubainisha: $firstMatch = array_find( $posts, function (Post $post) { return strlen($post->title) > 5; } ) ;
  • Tarehe Iliyoongezwa::getMicrosecond() na DateTimeImmutable::setMicrosecond($microsecond) mbinu za kupata na kuweka muda kwa usahihi wa microsecond, pamoja na njia ya DateTime::createFromTimestamp().
  • PDO (Vitu vya Data PHP), kiolesura dhahania cha kufanya kazi na hifadhidata, kimeongeza uwezo wa kuunda vichanganuzi vya SQL na vijasusi maalum kwa viendeshi fulani vya DBMS. Vikundi vipya vya Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc na Pdo\Sqlite vimeongezwa.
  • Imeongeza vitendaji vipya mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst(), bcceil(), bcdivmod(), bcfloor() na bcround(), pcntl_getcpu(), pcntl_getcpuaffinity(), pcnt_class_get , pcntl_setns(), pcntl_waitid(), http_get_last_response_headers(), http_clear_last_response_headers(), fpow()
  • Operesheni za kutoka na kufa sasa zinaweza kuitwa kama vitendaji kamili ambavyo vinaweza kupitishwa kama hoja kwa kazi zingine. Hapo awali, utendakazi wa kazi za exit() na die() ulikuwa mdogo sana, kwani zilikuwa vifungashio juu ya maneno muhimu ya kutoka na kufa.
  • Mabadiliko yameongezwa ili kufanya iwe vigumu zaidi kutumia athari za bafa zilizozidi, na pia kuongeza ujanibishaji wa majina ya faili yaliyoundwa kupitia kitendakazi cha tempnam().
  • Imeacha kutumia tabia ambapo vigezo vya utendakazi vilivyo na thamani chaguo-msingi ya null viliruhusiwa kiotomatiki kupewa thamani batili. Ili vigezo hivyo vikubali thamani zisizo na maana, kiashirio dhahiri cha kiambishi awali "?" Kwa mfano, badala ya "function save(Book $book = null) {}" unapaswa kubainisha "function save(?Book $book = null) {}".
  • Vipengele E_STRICT, MYSQLI_REFRESH_*, vitendakazi mysqli_ping(), mysqli_kill(), mysqli_refresh(), mbinu mysqli::ping(), mysqli::kill(), mysqli::refresh(), uwezo wa kutumia “_ ” kama jina la darasa, baadhi ya sifa za DOMDocument na DOMEntity. Kufafanua upya vibadilishio vya darasa la GMP ni marufuku, ambapo neno kuu la "mwisho" sasa limewekwa.

Zaidi ya hayo, tunaweza kutambua kutolewa kwa kichanganuzi tuli cha PHPStan 2.0, ambacho hukuruhusu kupata makosa katika nambari ya PHP bila kuitekeleza na kutumia vipimo vya kitengo. Mchanganuzi hutoa viwango 10, vinavyofunika maeneo kama vile kutambua vigezo visivyojulikana, madarasa yasiyojulikana, kazi na mbinu; kuangalia aina za hoja na maadili ya kurudi; matumizi sahihi ya aina fulani; Ufafanuzi wa msimbo ambao haujawahi kuitwa. Nambari ya mradi imeandikwa katika PHP na kusambazwa chini ya leseni ya MIT.

Chanzo: opennet.ru

Kuongeza maoni