PHP 8.2 programmeertaal vrystelling

Na 'n jaar van ontwikkeling is die vrystelling van die PHP 8.2-programmeertaal aangebied. Die nuwe tak bevat 'n reeks nuwe kenmerke, sowel as verskeie veranderinge wat versoenbaarheid verbreek.

Sleutelverbeterings in PHP 8.2:

  • Bygevoeg die vermoë om 'n klas as leesalleen te merk. Eienskappe in sulke klasse kan slegs een keer gestel word, waarna dit nie vir verandering beskikbaar sal wees nie. Voorheen kon individuele klaseienskappe as leesalleen gemerk word, maar nou kan jy hierdie modus vir alle klaseienskappe gelyktydig aanskakel. Deur die "leesalleen"-vlag op klasvlak te spesifiseer, blokkeer ook die dinamiese toevoeging van eienskappe tot die klas. leesalleen-klas Post { publieke funksie __konstruk (publieke string $titel, publieke outeur $outeur, ) {} } $pos = nuwe plasing(/* … */); $post->unknown = 'verkeerd'; // Fout: Kan nie dinamiese eiendom skep nie Post::$unknown
  • Bygevoeg aparte tipes "waar", "onwaar" en "nul", wat slegs een geldige waarde kan neem en word byvoorbeeld gebruik om 'n funksie met 'n foutbeëindiging vlag of 'n leë waarde terug te gee. Voorheen kon "true", "false" en "null" slegs saam met ander tipes gebruik word (byvoorbeeld, "string|false"), maar nou kan hulle afsonderlik gebruik word: function alwaysFalse(): false { return false ; }
  • Voorsien die vermoë om sensitiewe instellings in die stapelspooruitset te filter ten tyde van 'n fout. Die uitsny van sekere inligting kan nodig wees wanneer inligting oor foute wat voorkom outomaties na derdepartydienste gestuur word wat probleme opspoor en ontwikkelaars daaroor inlig. Byvoorbeeld, jy kan parameters van die spoor uitsluit wat gebruikersname, wagwoorde en omgewingsveranderlikes insluit. funksie toets ($foo, #[\SensitiveParameter] $wagwoord, $baz) {gooi nuwe uitsondering('Fout'); } test('foo', 'wagwoord', 'baz'); Noodlottige fout: Onopgevang Uitsondering: Fout in test.php:8 Stapelspoor: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} gegooi in test.php aanlyn 8
  • Word toegelaat om konstantes in eienskappe te definieer (eienskap, 'n meganisme vir hergebruik van kode). Konstante wat in 'n eienskap gedefinieer is, kan verkry word deur die klas wat die eienskap gebruik (maar nie deur die eienskapnaam nie). eienskap Foo { publieke konstante KONSTANT = 1; publieke funksiebalk(): int { gee self terug::CONSTANT; // Noodlottige fout } } klas Bar { gebruik Foo; } var_dump(Bar::CONSTANT); // 1
  • Bygevoeg die vermoë om tipes in die disjunktiewe normale vorm (DNF, Disjunctive Normal Form) te spesifiseer, wat jou toelaat om die unie van tipes (versamelings van twee of meer tipes) en die kruising van tipes (tipes waarvan die waardes onder verskeie val) te kombineer tipes gelyktydig). klas Foo { publieke funksiebalk((A&B)|nul $entiteit) { if ($entity === null) { return null; } gee $entiteit terug; } }
  • 'n Nuwe uitbreiding "Random" is voorgestel met funksies en klasse vir die generering van pseudo-ewekansige getalle en rye. Die module bied 'n objekgeoriënteerde koppelvlak, stel jou in staat om verskillende enjins te kies vir die generering van pseudo-ewekansige getalle, insluitend dié wat geskik is vir gebruik in kriptografie, en bied hulpfunksies, byvoorbeeld om skikkings en stringe ewekansig te meng, ewekansige skikkingsleutels te kies, gelyktydige gebruik van verskeie kragopwekkers met jou eie onafhanklike staat. $rng = $is_produksie? nuwe Random\Engine\Secure() : nuwe Random\Engine\Mt19937(1234); $randomizer = nuwe Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Geïmplementeerde plekonafhanklike saakomskakeling. Funksies soos strtolower() en strtoupper() skakel nou altyd die hoofletters van karakters in die ASCII-reeks om, soos wanneer die locale na "C" gestel word.
  • Nuwe funksies bygevoeg: 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.
  • Nuwe metodes bygevoeg: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Die vermoë om eienskappe in 'n klas dinamies te skep, is opgeskort. In PHP 9.0 sal toegang tot eienskappe wat nie aanvanklik in die klas gedefinieer is nie, 'n fout tot gevolg hê (ErrorException). Klasse wat __get en __set metodes verskaf vir die skep van eienskappe, of dinamiese eienskappe in stdClass sal voortgaan om te werk sonder veranderinge, slegs implisiete werk met nie-bestaande eienskappe sal ondersteun word om die ontwikkelaar te beskerm teen versteekte foute. Om die werk van die ou kode te bewaar, word die "#[AllowDynamicProperties]"-kenmerk voorgestel, wat die gebruik van dinamiese eienskappe toelaat.
  • Die vermoë om veranderlike waardes in stringe te vervang deur "${var}" en ${(var)}" uitdrukkings te gebruik, is opgeskort. Ondersteuning vir algemeen gebruikte "{$var}" en "$var" vervangings is behou. Byvoorbeeld: "Hallo {$world}"; OK "Hallo $wêreld"; OK "Hallo ${wêreld}"; Afgeskryf: Die gebruik van ${} in stringe is opgeskort
  • Gedeeltelik ondersteunde oproepbares wat via "call_user_func($callable)" geroep kan word, is opgeskort, maar ondersteun nie oproepe in die vorm "$callable()": "self::method" "parent::method" "static :: metode" ["self", "metode"] ["ouer", "metode"] ["staties", "metode"] ["Foo", "Bar::metode"] [nuwe Foo, "Bar: :metode" "]
  • Die error_log_mode-aanwysing is by die instellings gevoeg, sodat jy die toegangsmodus tot die foutlog kan bepaal.

Bron: opennet.ru

Voeg 'n opmerking