PHP 8.1 serbestberdana zimanê bernamekirinê

Piştî salek pêşveçûnê, serbestberdana zimanê bernamenûsê PHP 8.1 hate pêşkêş kirin. Şaxa nû rêzek taybetmendiyên nû vedihewîne, û her weha gelek guhertinên ku lihevhatinê dişkînin.

Pêşveçûnên sereke di PHP 8.1 de:

  • Ji bo jimartinan piştgirî zêde kir, wek nimûne, hûn niha dikarin van avahîyên jêrîn bikar bînin: enum Status { case Bending; case Active; doz Archived; } class Post { fonksiyona giştî __construct( taybet Status $status = Status::Pending; ) {} function public setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Piştgiriyek ji bo mijarên sivik ên bi navê Fibers zêde kir, ku dihêle hûn mijarên darvekirinê di astek nizm de birêve bibin. Piştgiriya fiber tê plan kirin ku li çarçoveyên Amphp û ReactPHP were zêdekirin. $fiber = Fibera nû (fonksiyona (): void { $valueAfterResuming = Fiber::suspend('piştî rawestandin'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('piştî ji nû ve destpêkirinê');
  • Bicîhkirina cache-ya kodê ya objektê (opcache) çêtir bûye, ku gengaz e ku meriv agahdariya di derheqê mîrasiya polê de cache bike. Optimîzasyonê mimkun kir ku performansa hin serlêdanan% 5-8 zêde bike. Optimîzasyonên din xweşbînkirina operasyona JIT-ê, pêkanîna piştgiriya JIT-ê ji bo mîmariya ARM64 (AArch64), bilezkirina çareseriya navan, xweşbînkirina pirtûkxaneyên dem û ext/date, zêdekirina performansa serialîzasyon û deserialîzasyonê, xweşbînkirina get_declared_classes (), teqîn () , fonksiyona strtr(), strnatcmp(), dechex(). Bi gelemperî, ji bo Symfony Demo 23.0% zêdebûnek performansê heye, û ji bo WordPress% 3.5.
  • Operatora vekêşana di hundurê rêzikên "...$var" de, ku destûrê dide guheztina rêzikên heyî dema ku rêzek nû destnîşan dike, ji bo piştgirîkirina bişkokên rêzê hate berfireh kirin (berê tenê nasnameyên dîjîtal piştgirî dikirin). Mînakî, niha hûn dikarin kodê bikar bînin: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Destûr e ku meriv peyva "nû" di destpêkêkeran de bikar bîne, wek mînak di pênaseyên fonksiyonê de wekî pîvanek xwerû an di taybetmendiyên arguman de. class MyController { fonksiyona gelemperî __construct (Logger taybet $logger = nû NullLogger(), ) {} }
  • Mimkun e ku meriv taybetmendiyên polê ji bo gihîştina tenê xwendinê nîşan bide (agahdariya di taybetmendiyên weha de tenê carekê dikare were nivîsandin, piştî ku ew ê ji bo guhartinê peyda nebe). class PostData { fonksiyona giştî __construct( rêzika giştî ya tenê xwendinê $sernav, tenê ji bo xwendinê ya giştî DateTimeImmutable $date, ) {} } $post = Posta nû('Sernav', /* … */); $post->title = 'Yên din'; > Çewtî: Taybetmendiya tenê xwendinê nayê guhertin Post::$title
  • Hevoksaziyek nû ji bo tiştên gazîkirî hate bicîh kirin - girtina fonksiyonek nuha dikare bi gazîkirina fonksiyonek û derbaskirina wê nirxa "..." wekî arguman pêk were (ango myFunc(...) li şûna Girtin::fromCallable('myFunc ')): fonksiyona foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Piştgiriya bêkêmasî ji bo celebên navberê zêde kir, ku dihêle hûn bi berhevkirina yên heyî celebên nû biafirînin. Berevajî celebên yekîtiyê, yên ku berhevokên du an bêtir celeb diyar dikin, celebên hevberdanê ne ji celebên navnîşkirî, lê hemî celebên diyarkirî yên di berhevoka dagirtî de hewce dike. function generateSlug(HasTitle&HasId $post) {vegere strtolower($post->getTitle()) . $post->getId(); }
  • Tîpek nû "tu carî" heye ku dikare were bikar anîn da ku analîzkerên statîk agahdar bike ku fonksiyonek dê pêkanîna bernameyê biqedîne, mînakî bi avêtina îstîsnayek an pêkanîna fonksiyona derketinê. fonksiyona dd($input tevlihev): qet { dernekeve; }
  • Fonksiyonek nû array_is_list hate pêşniyar kirin, ku dihêle hûn diyar bikin ku bişkokên di rêzê de li gorî zêdebûna nirxên hejmarî hatine rêz kirin, ji 0-yê dest pê dikin: $list = [“a”, “b”, “c”]; array_is_list($list); // rast $notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // derewîn
  • Naha hûn dikarin peyva sereke ya "dawî" bikar bînin da ku rê li ber girtina berdewamên çîna dêûbav bigirin. class Foo { const giştî ya dawî X = "foo"; } class Bar extends Foo { public const X = "bar"; > Çewtiya kujer: Bar::X nikare berdewamiya dawîn bişkîne Foo::X }
  • Fonksiyonên fsync û fdatasync têne pêşniyar kirin ku zorê bidin guhertinên ku ji cache dîskê werin hilanîn. $file = fopen("sample.txt", "w"); fwrite($pel, "Hin naverok"); if (fsync($file)) { echo "Pel bi serkeftî li ser dîskê berdewam bû."; } fclose($pel);
  • Ji bilî pêşgira ku berê hatî bikar anîn "0" ji bo hejmarên oktal karîna karanîna pêşpirtikên "0o" û "0O" zêde kir. 016 === 0o16; // rast 016 === 0O16; // rast
  • Tê pêşniyar kirin ku bi rengek bijartî karanîna $ GLOBALS were sînorkirin, ku dê bibe sedema binpêkirina lihevhatina paşverû, lê dê gengaz bike ku operasyonên bi rêzan re bi girîngî bileztir bibin. Mînakî, îmkana neçalakkirina nivîsandina $GLOBALS û derbaskirina $GLOBALS ji hêla nîşanderê ve tê hesibandin. Analîza 2000 pakêtan nîşan da ku tenê 23 ji wan dê ji vê guherînê bandor bibin. Mînakî, heke pêşnûme were pejirandin, dê 8.1 êdî piştgirîya îfadeyên wekî: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Rêbazên navxweyî divê nuha celebê rast vegerînin. Di PHP 8.1-ê de, vegerandina celebek ku bi danezana fonksiyonê re li hev nake dê hişyariyek çêbike, lê di PHP 9.0 de hişyarî dê bi xeletiyek were guheztin.
  • Xebat li ser veguheztina fonksiyonan ji karanîna çavkaniyan ber manîpulekirina tiştan berdewam kir. Fonksiyonên finfo_* û imap_* li tiştan hatine veguheztin.
  • Derbaskirina nirxên null wekî argûman ji fonksiyonên hundurîn ên ku wekî nenûle hatine nîşankirin, hate derxistin. Di PHP 8.1-ê de, karanîna avahiyên mîna str_contains ("string", null) dê bibe sedema hişyariyek, û di PHP 9 de dê bibe xeletiyek.
  • Piştgiriyek ji bo algorîtmayên haşkirina MurmurHash3 û xxHash zêde kir.

Source: opennet.ru

Add a comment