Kutolewa kwa lugha ya programu ya PHP 8.1

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

Maboresho muhimu katika PHP 8.1:

  • Usaidizi ulioongezwa kwa hesabu, kwa mfano, sasa unaweza kutumia miundo ifuatayo: enum Status { case Pending; kesi Active; kesi iliyohifadhiwa; } Chapisho la darasa { kitendakazi cha umma __construct( private Status $status = Status::Pending; ) {} utendakazi wa umma setStatus(Hali $status): batili { // … } } $post->setStatus(Hali::Inayotumika);
  • Usaidizi ulioongezwa kwa nyuzi nyepesi zinazoitwa Fibers, ambazo hukuruhusu kudhibiti nyuzi za utekelezaji kwa kiwango cha chini. Usaidizi wa nyuzinyuzi umepangwa kuongezwa kwa mifumo ya Amphp na ReactPHP. $fiber = Nyuzi mpya(kazi (): batili {$valueAfterResuming = Fiber::suspend('baada ya kusimamisha'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber-> resume('baada ya kuanza tena');
  • Utekelezaji wa kashe ya msimbo wa kitu (opcache) umeboreshwa, na kuifanya iwezekane kuweka habari kuhusu urithi wa darasa. Uboreshaji ulifanya iwezekane kuongeza utendaji wa baadhi ya programu kwa 5-8%. Uboreshaji mwingine ni pamoja na uboreshaji wa utendakazi wa JIT, utekelezaji wa usaidizi wa JIT kwa usanifu wa ARM64 (AArch64), uharakishaji wa azimio la jina, uboreshaji wa saa na maktaba ya zamani/tarehe, utendakazi ulioongezeka wa ufuataji na uondoaji, uboreshaji wa get_declared_classes(), mlipuko() , strtr() kitendakazi, strnatcmp(), dechex(). Kwa ujumla, kuna ongezeko la 23.0% la utendaji wa Symfony Demo, na 3.5% kwa WordPress.
  • Opereta inayofungua ndani ya safu "...$var", ambayo inaruhusu uingizwaji wa safu zilizopo wakati wa kufafanua safu mpya, imepanuliwa ili kusaidia vitufe vya kamba (awali vitambulishi vya dijiti pekee vilitumika). Kwa mfano, sasa unaweza kutumia katika msimbo: $array1 = [β€œa” => 1]; $array2 = ["b" => 2]; $array = [β€œa” => 0, …$array1, …$array2]; var_dump(safu ya $); // ["a" => 1, "b" => 2]
  • Inaruhusiwa kutumia neno muhimu "mpya" katika vianzilishi, kama vile katika ufafanuzi wa chaguo-msingi kama kigezo chaguo-msingi au sifa za hoja. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Inawezekana kuashiria sifa za darasa kwa ufikiaji wa kusoma tu (habari katika mali kama hizo zinaweza kuandikwa mara moja tu, baada ya hapo hazitapatikana kwa mabadiliko). class PostData { kazi ya umma __construct( mfuatano wa kusoma tu wa umma $title, usomaji wa umma pekee DateTimeImmutable $date, ) {} } $post = Chapisho jipya('Kichwa', /* … */); $post->title = 'Nyingine'; > Hitilafu: Haiwezi kurekebisha kipengele cha kusoma pekee Chapisho::$title
  • Sintaksia mpya imetekelezwa kwa vitu vinavyoweza kupigiwa simu - kufungwa sasa kunaweza kuundwa kwa kuita kitendakazi na kuipitisha thamani "..." kama hoja (yaani myFunc(...) badala ya Closure::fromCallable('myFunc) ')): chaguo la kukokotoa foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Imeongeza usaidizi kamili wa aina za makutano, huku kuruhusu kuunda aina mpya kwa kuchanganya zilizopo. Tofauti na aina za umoja, ambazo hufafanua makusanyo ya aina mbili au zaidi, aina za makutano zinahitaji uwepo wa sio aina yoyote iliyoorodheshwa, lakini aina zote zilizotajwa katika seti ya kujazwa. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Kuna aina mpya ya "kamwe" inayoweza kutumiwa kufahamisha vichanganuzi tuli kwamba chaguo la kukokotoa litasitisha utekelezaji wa programu, kwa mfano kwa kutupa kighairi au kutekeleza chaguo la kukokotoa kutoka. function dd(mixed $input): kamwe {toka; }
  • Array_is_list mpya imependekezwa, ambayo inakuwezesha kuamua kwamba funguo katika safu zimepangwa kwa utaratibu wa kuongeza maadili ya nambari, kuanzia 0: $list = [β€œa”, β€œb”, β€œc”]; array_is_list(orodha ya $); // kweli $notAList = [1 => β€œa”, 2 => β€œb”, 3 => β€œc”]; array_is_list($notAList); // uongo $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // uongo
  • Sasa unaweza kutumia neno kuu la "mwisho" ili kuzuia vidhibiti vya darasa la wazazi kubatilishwe. class Foo { final public const X = "foo"; } Upau wa darasa unapanua Foo { public const X = "bar"; > Hitilafu mbaya: Upau::X haiwezi kubatilisha mara kwa mara Foo::X }
  • Utendakazi wa fsync na fdatasync unapendekezwa ili kulazimisha mabadiliko kuhifadhiwa kutoka kwa akiba ya diski. $file = fopen("sample.txt", "w"); fwrite($file, "Baadhi ya maudhui"); if (fsync($file)) { echo "Faili imedumishwa kwa diski kwa mafanikio."; } fclose(faili la $);
  • Aliongeza uwezo wa kutumia viambishi awali "0o" na "0O" kwa nambari za octal, pamoja na kiambishi awali kilichotumiwa "0". 016 === 0o16; // kweli 016 === 0O16; // kweli
  • Inapendekezwa kuweka kikomo cha matumizi ya $GLOBALS kwa kuchagua, ambayo itasababisha ukiukaji wa upatanifu wa nyuma, lakini itafanya iwezekanavyo kuharakisha utendakazi kwa safu. Kwa mfano, uwezekano wa kuzima kuandika kwa $GLOBALS na kupitisha $GLOBALS kwa kielekezi unazingatiwa. Uchambuzi wa vifurushi 2000 ulionyesha kuwa ni 23 tu kati yao ambao wangeathiriwa na mabadiliko haya. Kwa mfano, ikiwa pendekezo limeidhinishwa, 8.1 haitatumika tena na vielezi kama vile: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; haijawekwa($GLOBALS); by_ref($GLOBALS);
  • Njia za ndani sasa zinapaswa kurudisha aina sahihi. Katika PHP 8.1, kurejesha aina ambayo hailingani na tamko la chaguo la kukokotoa itatoa onyo, lakini katika PHP 9.0 onyo litabadilishwa na kosa.
  • Kazi iliendelea kuhamisha kazi kutoka kwa kutumia rasilimali hadi kudhibiti vitu. Vitendaji vya finfo_* na imap_* vimehamishiwa kwa vipengee.
  • Kupitisha thamani batili kama hoja kwa vitendakazi vya ndani vilivyotiwa alama kuwa hazibatiliki kumeacha kutumika. Katika PHP 8.1, kutumia miundo kama str_contains("string", null) itasababisha onyo, na katika PHP 9 kwa hitilafu.
  • Usaidizi umeongezwa kwa MurmurHash3 na xxHash hashing algoriti.

Chanzo: opennet.ru

Kuongeza maoni