Kutolewa kwa lugha ya programu ya PHP 8.2

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

Maboresho muhimu katika PHP 8.2:

  • Imeongeza uwezo wa kutia alama kwenye darasa kama la kusoma pekee. Mali katika madarasa hayo yanaweza kuweka mara moja tu, baada ya hapo haitapatikana kwa mabadiliko. Hapo awali, sifa za darasa la mtu binafsi zingeweza kuwekewa alama ya kusoma tu, lakini sasa unaweza kuwasha modi hii kwa sifa zote za darasa mara moja. Kubainisha bendera ya "kusoma pekee" katika kiwango cha darasa pia huzuia uongezaji thabiti wa sifa kwa darasa. readonly class Chapisho { kazi ya umma __construct( kamba ya umma $title, Mwandishi wa umma $author, ) {} } $post = Chapisho jipya(/* … */); $post->unknown = 'vibaya'; // Hitilafu: Haiwezi kuunda kipengele cha nguvu Chapisho::$haijulikani
  • Aina tofauti za "kweli", "uongo" na "null" zimeongezwa, ambazo zinaweza kuchukua thamani moja tu halali na hutumiwa, kwa mfano, kurejesha chaguo la kukokotoa lenye alama ya kukomesha hitilafu au thamani tupu. Hapo awali, "kweli", "uongo" na "null" ziliweza tu kutumiwa pamoja na aina zingine (kwa mfano, "string|false"), lakini sasa zinaweza kutumika kando: function alwaysFalse(): false { return false ; }
  • Ilitoa uwezo wa kuchuja mipangilio nyeti katika matokeo ya ufuatiliaji wa rafu wakati wa hitilafu. Kukata maelezo fulani kunaweza kuhitajika wakati maelezo kuhusu makosa yanayotokea yanatumwa kiotomatiki kwa huduma za wahusika wengine ambazo hufuatilia matatizo na kuwafahamisha wasanidi programu kuyahusu. Kwa mfano, unaweza kutenga vigezo kutoka kwa ufuatiliaji unaojumuisha majina ya watumiaji, manenosiri, na vigezo vya mazingira. jaribio la utendaji ( $foo, #[\SensitiveParameter] $password, $baz ) {rusha Isipokuwa Mpya('Kosa'); } jaribio('foo', 'nenosiri', 'baz'); Hitilafu mbaya sana: Isipokuwa Haijashughulikiwa: Hitilafu katika test.php:8 Ufuatiliaji wa rafu: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} imetupwa kwenye test.php mtandaoni 8
  • Inaruhusiwa kufafanua viambajengo katika sifa (sifa, utaratibu wa kutumia tena msimbo). Mara kwa mara yaliyofafanuliwa katika sifa yanaweza kufikiwa kupitia darasa linalotumia sifa (lakini si kupitia jina la sifa). sifa Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Hitilafu mbaya } } Upau wa darasa {tumia Foo; } var_dump(Bar::CONSTANT); // 1
  • Imeongeza uwezo wa kutaja aina katika fomu ya kawaida ya disjunctive (DNF, Disjunctive Normal Form), ambayo inakuwezesha kuchanganya umoja wa aina (mkusanyiko wa aina mbili au zaidi) na makutano ya aina (aina ambazo maadili yake huanguka chini ya kadhaa. aina kwa wakati mmoja). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } rudisha chombo cha $; }}
  • Kiendelezi kipya cha "Nasibu" kimependekezwa kikiwa na chaguo za kukokotoa na madarasa kwa ajili ya kuzalisha nambari na mfuatano bandia. Moduli hutoa kiolesura chenye mwelekeo wa kitu, hukuruhusu kuchagua injini tofauti za kutengeneza nambari za bahati nasibu, ikiwa ni pamoja na zile zinazofaa kutumika katika cryptography, na hutoa kazi za msaidizi, kwa mfano, kwa kuchanganya kwa nasibu safu na kamba, kuchagua funguo za safu za random, matumizi ya wakati mmoja ya jenereta kadhaa na hali yako ya kujitegemea. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $ randomizer->shuffleString('foobar');
  • Ubadilishaji wa kesi wa eneo-huru uliotekelezwa. Kazi kama vile strtolower() na strtoupper() sasa kila wakati hubadilisha kisa cha herufi katika safu ya ASCII, kama wakati wa kuweka eneo kuwa "C".
  • Utendaji mpya umeongezwa: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Mbinu mpya zilizoongezwa: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Uwezo wa kuunda sifa kwa nguvu katika darasa umeacha kutumika. Katika PHP 9.0, kupata mali ambayo haijafafanuliwa hapo awali kwenye darasa itasababisha hitilafu (ErrorException). Madarasa ambayo hutoa __get na __kuweka mbinu za kuunda sifa, au sifa zinazobadilika katika stdClass zitaendelea kufanya kazi bila mabadiliko, ni kazi mahiri pekee yenye sifa ambazo hazipo ndizo zitatumika ili kulinda msanidi dhidi ya hitilafu zilizofichwa. Ili kuhifadhi kazi ya msimbo wa zamani, sifa ya "#[AllowDynamicProperties]" inapendekezwa, ikiruhusu matumizi ya sifa zinazobadilika.
  • Uwezo wa kubadilisha thamani tofauti katika mifuatano kwa kutumia vielezi vya "${var}" na ${(var)}" umeacha kutumika. Usaidizi wa vibadala vya "{$var}" na "$var" vinavyotumiwa sana umehifadhiwa. Kwa mfano: "Hujambo {$world}"; Sawa "Hujambo $dunia"; SAWA "Hujambo ${ulimwengu}"; Imeacha kutumika: Kutumia ${} katika mifuatano kumeacha kutumika
  • Vipiga simu vinavyotumika kwa kiasi vinavyoweza kuitwa kupitia "call_user_func($callable)" vimeacha kutumika, lakini haziauni kupiga simu kwa njia ya "$callable()": "self::method" "parent::method" "static :: method" ["self", "method"] ["mzazi", "mbinu"] ["tuli", "method"] ["Foo", "Bar::method"] [new Foo, "Bar: :method"] "]
  • Maagizo ya error_log_mode yameongezwa kwenye mipangilio, huku kuruhusu kuamua hali ya kufikia kwenye logi ya makosa.

Chanzo: opennet.ru

Kuongeza maoni