PHP 8.2 serbestberdana zimanê bernamekirinê

Piştî salek pêşveçûnê, serbestberdana zimanê bernamenûsê PHP 8.2 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.2 de:

  • Kapasîteya nîşankirina polê wekî tenê-xwendewarî lê zêde kir. Taybetmendiyên di çînên weha de tenê carekê têne danîn, piştî ku ew ê ji bo guhertinê nebin. Berê, taybetmendiyên pola ferdî dikaribû bi tenê-xwendinê were nîşankirin, lê naha hûn dikarin vê modê ji bo hemî taybetmendiyên polê bi yekcarî vekin. Diyarkirina ala "xwendî" di asta polê de jî zêdekirina dînamîk a taybetmendiyan li polê asteng dike. tenê xwendin class Post { fonksiyona giştî __construct( rêzika giştî $sernav, giştî Nivîskar $author, ) {} } $post = Posta nû(/* … */); $post->nenas = 'şaş'; // Çewtî: Taybetmendiya dînamîk nayê afirandin Post::$nenas
  • Tîpên cuda "rast", "derew" û "null" hatin zêdekirin, ku dikarin tenê nirxek derbasdar bigirin û têne bikar anîn, mînakî, ji bo vegerandina fonksiyonek bi ala bidawîkirina xeletiyê an nirxek vala. Berê, "rast", "derew" û "null" tenê dikaribû bi cureyên din re were bikar anîn (mînak, "string|derew"), lê naha ew dikarin ji hev cuda werin bikar anîn: fonksiyona herdemFalse(): xelet {vegere derewîn ; }
  • Di dema xeletiyekê de şiyana fîlterkirina mîhengên hesas di derketina şopa stakê de peyda kir. Dema ku agahdariya li ser xeletiyên ku diqewimin bixweber ji karûbarên sêyemîn ên ku pirsgirêkan dişopînin û pêşdebiran di derheqê wan de agahdar dikin re têne şandin, qutkirina hin agahdarî dibe ku hewce bike. Mînakî, hûn dikarin parametreyên ku navên bikarhêner, şîfre û guhêrbarên hawîrdorê vedigirin ji şopê derxin. testa fonksiyonê( $foo, #[\SensitiveParameter] $şîfre, $baz ) { Îstîsnayeke nû bavêje('Çewtî'); } test('foo', 'password', 'baz'); Çewtiya kujer: Negirtî Exception: Di testê de çewtî.php:8 Şopa stûnê: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} di test.php de li ser rêza 8-ê hatî avêtin
  • Destûr dide ku di taybetmendiyan de domdar diyar bike (taybet, mekanîzmayek ji bo ji nû ve karanîna kodê). Berdewamên ku di taybetmendiyekê de têne diyar kirin dikare bi riya çîna ku taybetmendiyê bikar tîne (lê ne bi navgîniya navê taybetmendiyê) ve were gihîştin. taybetmendî Foo { bergiriya giştî CONSTANT = 1; bara fonksiyona giştî(): int {vegere xwe::CONSTANT; // Çewtiya kujer } } class Bar { Foo bikar bîne; } var_dump(Bar::CONSTANT); // 1
  • Kapasîteya diyarkirina celebên di forma normal a veqetandî de (DNF, Forma Normal a Disjunctive), ku destûrê dide te ku yekbûna celeban (kolek ji du an bêtir celeb) û hevberdana celeban (cûreyên ku nirxên wan di bin çend kesan de ne) bi hev re bikin. cureyên hevdemî). class Foo { barê fonksiyona giştî((A&B)|null $entity) {ger ($entity === null) {vegere null; } vegere $entity; } }
  • Pêvekek nû "Random" bi fonksiyon û çînên ji bo çêkirina jimar û rêzikên pseudo-random ve hatî pêşniyar kirin. Modul navbeynkariyek-objekt-oriented peyda dike, dihêle hûn motorên cihêreng hilbijêrin ji bo çêkirina hejmarên pseudo-random, tevî yên ku ji bo karanîna di krîptografiyê de guncan in, û fonksiyonên alîkar peyda dike, mînakî, ji bo tevlihevkirina bêserûber a rêz û rêzan, bijartina bişkokên rêzikên random, bikaranîna hevdem a çend jeneratoran bi dewleta xwe ya serbixwe re. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = nû Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Veguherîna doza serbixwe-herêmî pêk anî. Fonksiyonên mîna strtolower() û strtoupper() naha her gav rewşa tîpan di nav rêza ASCII de vediguhezînin, wekî dema ku cîhê li "C" saz bikin.
  • Fonksiyonên nû lê zêde kirin: 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.
  • Rêbazên nû lê zêde kirin: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Kapasîteya çêkirina dînamîk taybetmendiyan di polê de ji holê rabûye. Di PHP 9.0 de, gihîştina taybetmendiyên ku di destpêkê de di polê de nehatine destnîşankirin dê bibe sedema xeletiyek (ErrorException). Çînên ku rêbazên __get û __set ji bo afirandina taybetmendiyan peyda dikin, an taybetmendiyên dînamîkî yên di stdClass de dê bêyî guhartinan bixebitin, tenê xebata nepenî ya bi taybetmendiyên neheyî dê were piştgirî kirin da ku pêşdebir ji xeletiyên veşartî biparêze. Ji bo parastina xebata koda kevn, taybetmendiya "#[AllowDynamicProperties]" tê pêşniyar kirin, ku destûrê dide karanîna taybetmendiyên dînamîkî.
  • Qabiliyeta guheztina nirxên guhêrbar di nav rêzan de bi karanîna biwêjên "${var}" û ${(var)}" hate betal kirin. Piştgiriya ji bo cîgirên "{$var}" û "$var" yên ku bi gelemperî têne bikar anîn parastiye. Mînak: "Silav {$world}"; OK "Silav $world"; OK "Silav ${world}"; Berbiçav: Bikaranîna ${} ya di rêzikan de tê betal kirin
  • Bangên qismî yên piştgirîkirî yên ku dikarin bi rêya "call_user_func($callable)" werin gazî kirin, lê piştgirî nadin bangawaziya bi forma "$callable()": "self::metod" "bav::rêbaz" "statîk::rêbaz" ["xwe", "rêbaz"] "["bav", "rêbaz":F] Foo, "Bar:: rêbaz"]
  • Rêvebiriya error_log_mode li mîhengan hate zêdekirin, ku dihêle hûn moda gihîştina têketina xeletiyê diyar bikin.

Source: opennet.ru

Add a comment