PHP 8.2 ukukhululwa kolwimi lwenkqubo

Emva konyaka wophuhliso, ukukhutshwa kolwimi lweprogram ye-PHP 8.2 kwaboniswa. Isebe elitsha liquka uluhlu lweempawu ezintsha, kunye neenguqu ezininzi eziphula ukuhambelana.

Uphuculo oluphambili kwi-PHP 8.2:

  • Wongeze isakhono sokumakisha iklasi njengokufunda kuphela. Iipropati kwiiklasi ezinjalo zingasetwa kanye kuphela, emva koko azikwazi ukutshintshwa. Ngaphambili, iipropathi zodidi lomntu ngamnye bezinokuphawulwa njengokufunda kuphela, kodwa ngoku ungayenza le ndlela kuzo zonke iipropathi zodidi ngaxeshanye. Ukuchaza iflegi "yokufunda kuphela" kwinqanaba leklasi ikwathintela iipropathi ekubeni zongezwe ngokuguquguqukayo eklasini. iklasi yokufunda kuphela iPosi { umsebenzi woluntu __construct( umtya woluntu $isihloko, uMbhali woluntu $umbhali, ) {} } $ iposti = iPosi entsha (/* … */); $ post->unknown = 'engalunganga'; // Impazamo: Ayinakudala ipropathi eguqukayo Isithuba::$unknown
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Β«trueΒ», Β«falseΒ» ΠΈ Β«nullΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ допустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для возвращСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ с ошибкой ΠΈΠ»ΠΈ пустого значСния. Π Π°Π½Π΅Π΅ Β«trueΒ», Β«falseΒ» ΠΈ Β«nullΒ» ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² связкС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«string|falseΒ»), Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ: function alwaysFalse(): false { return false; }
  • Ibonelela ngokukwazi ukuhluza iiparamitha ezinovakalelo kwimveliso yokulandelela isitaki ngexesha lempazamo. Ukusika ulwazi oluthile kunokuba yimfuneko xa ulwazi malunga neempazamo ezenzekayo zithunyelwa ngokuzenzekelayo kwiinkonzo zomntu wesithathu ezilandelela iingxaki kunye nokwazisa abaphuhlisi ngazo. Umzekelo, ungakhuphela ngaphandle iiparamitha eziquka amagama omsebenzisi, amagama agqithisiweyo, kunye nezinto eziguquguqukayo zemo engqongileyo kumkhondo. umsebenzi wovavanyo ( $foo, #[\SensitiveParameter] $password, $baz ) {phosa iNxalenye entsha('Impazamo'); } uvavanyo('foo', 'password', 'baz'); Impazamo ebulalayo: Imeko Engabanjwanga: Impazamo kuvavanyo.php:8 Ukulandelela isitaki: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} iphoswe kuvavanyo.php kumgca 8
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ констант Π² Ρ‚ΠΈΠΏΠ°ΠΆΠ°Ρ… (trait, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π°). Доступ ΠΊ константам, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ Π² Ρ‚ΠΈΠΏΠ°ΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏΠ°ΠΆ (Π½ΠΎ Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· имя Ρ‚ΠΈΠΏΠ°ΠΆΠ°). trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ задания Ρ‚ΠΈΠΏΠΎΠ² Π² Π΄ΠΈΠ·ΡŠΡŽΠ½ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ (DNF, Disjunctive Normal Form), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ объСдинСниС Ρ‚ΠΈΠΏΠΎΠ² (ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΈΠΏΠΎΠ²) ΠΈ пСрСсСчСниС Ρ‚ΠΈΠΏΠΎΠ² (Ρ‚ΠΈΠΏΡ‹, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ нСсколько Ρ‚ΠΈΠΏΠΎΠ²). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entity; } }
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Β«RandomΒ» c функциями ΠΈ классами для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ псСводослучайных чисСл ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ прСдоставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ интСрфСйс, позволяСт Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ псСводослучайных чисСл, Π² Ρ‚ΠΎΠΌ числС ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Π΅ для примСнСния Π² ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ, ΠΈ прСдоставляСт Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для случайного ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΈΠ²Π°Π½ΠΈΡ массивов ΠΈ строк, Π²Ρ‹Π±ΠΎΡ€Π° случайных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ массива, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² со своим нСзависимым состояниСм. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString(β€˜foobar’);
  • Kuphunyezwe uguqulo lwemeko ezimeleyo yendawo. Imisebenzi efana ne-strtolower () kunye ne-strtoupper () ngoku ihlala iguqula imeko yeempawu kuluhlu lwe-ASCII ngokungathi imiselwe kwi-"C" yendawo.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: 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.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • ОбъявлСна ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСского создания свойств Π² классС. Π’ PHP 9.0 ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ свойствам, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ Π² классС, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ошибкС (ErrorException). ΠšΠ»Π°ΡΡΡ‹, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ __get ΠΈ __set для создания свойств, ΠΈΠ»ΠΈ динамичСскиС свойства Π² stdClass ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, прСкратится ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСявной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ свойствами для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ скрытых ошибок. Для сохранСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ старого ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Β«#[AllowDynamicProperties]Β», Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ использованиС динамичСских свойств.
  • Ukukwazi ukutshintsha amaxabiso aguquguqukayo kwimitya usebenzisa intetho ethi "${var}" kunye ne-${(var)} iye yarhoxiswa. Inkxaso esetyenziswa ngokuqhelekileyo "{$var}" kunye ne "$var" endaweni egciniweyo igciniwe. Umzekelo: "Molo {$world}"; Kulungile "Molo ihlabathi"; Kulungile "Molo ${ihlabathi}"; Yekisiwe: Ukusebenzisa i-${} kumtya kuyekisiwe
  • Iifowuni ezifowunelwayo ezingaxhaswanga ezingabizwa ngokuthi "call_user_func($callable)" kodwa azikuxhasi ukufowuna ngohlobo lwe "$callable()": "self::indlela" "parent::indlela" "static" ::indlela " ["self", "indlela"] ["umzali", "indlela"] ["static", "method"] ["Foo", "Bar::method"] [iFoo entsha, "Ibha: :indlela" ]
  • Π’ настройки Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° error_log_mode, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ доступа ΠΊ Π»ΠΎΠ³Ρƒ с ошибками.

umthombo: opennet.ru

Yongeza izimvo