Rhyddhau iaith raglennu PHP 8.2

Ar ôl blwyddyn o ddatblygiad, cyflwynwyd rhyddhau iaith raglennu PHP 8.2. Mae'r gangen newydd yn cynnwys cyfres o nodweddion newydd, yn ogystal â nifer o newidiadau sy'n torri cydnawsedd.

Gwelliannau allweddol yn PHP 8.2:

  • Ychwanegwyd y gallu i farcio dosbarth fel un darllen yn unig. Dim ond unwaith y gellir gosod eiddo mewn dosbarthiadau o'r fath, ac ar ôl hynny ni ellir eu newid. Yn flaenorol, gellid marcio priodweddau dosbarth unigol yn ddarllen-yn-unig, ond nawr gallwch chi alluogi'r modd hwn ar gyfer holl briodweddau dosbarth ar unwaith. Mae nodi'r faner "darllen yn unig" ar lefel dosbarth hefyd yn rhwystro eiddo rhag cael eu hychwanegu'n ddeinamig i'r dosbarth. dosbarth darllen yn unig Post { swyddogaeth gyhoeddus __construct( llinyn cyhoeddus $title, Awdur cyhoeddus $author, ) {} } $ post = Post newydd(/* … */); $post->unknown = 'anghywir'; // Error: Methu creu priodwedd deinamig Post::$unknown
  • Ychwanegwyd mathau ar wahân “gwir”, “ffug” a “nwl”, a all gymryd dim ond un gwerth dilys ac a ddefnyddir, er enghraifft, i ddychwelyd swyddogaeth gyda baner terfynu gwall neu werth gwag. Yn flaenorol, dim ond ar y cyd â mathau eraill (er enghraifft, “llinyn | ffug”) y gellid defnyddio “gwir”, “ffug” a “nwl”), ond nawr gellir eu defnyddio ar wahân: swyddogaeth bob amserFalse(): ffug { dychwelyd ffug ; }
  • Yn darparu'r gallu i hidlo paramedrau sensitif yn yr allbwn olrhain pentwr yn ystod gwall. Efallai y bydd angen dileu gwybodaeth benodol pan fydd gwybodaeth am wallau sy'n digwydd yn cael ei hanfon yn awtomatig at wasanaethau trydydd parti sy'n olrhain problemau ac yn hysbysu datblygwyr amdanynt. Er enghraifft, gallwch eithrio paramedrau sy'n cynnwys enwau defnyddwyr, cyfrineiriau, a newidynnau amgylchedd rhag olrhain. prawf swyddogaeth ( $ foo , #[ \ SensitiveParameter ] $ password , $baz ) { taflu Eithriad newydd ('Gwall'); } prawf ('foo', 'cyfrinair', 'baz'); Gwall angheuol: Heb ei ddal Eithriad: Gwall yn test.php:8 Olrhain pentwr: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} wedi'i daflu i test.php ar lein 8
  • Caniateir diffinio cysonion mewn nodweddion (nodwedd, mecanwaith ar gyfer ailddefnyddio cod). Gellir cyrchu cysonion a ddiffinnir mewn nodwedd trwy'r dosbarth sy'n defnyddio'r nodwedd (ond nid trwy enw'r nodwedd). trait Foo { public const CONSTANT = 1; bar swyddogaeth gyhoeddus (): int { dychwelyd hunan::CONSTANT; // Gwall angheuol } } Bar dosbarth { defnyddiwch Foo; } var_dump(Bar:: CONSTANT); // 1
  • Ychwanegwyd y gallu i nodi mathau yn y ffurf arferol anghysylltiol (DNF, Ffurflen Anghyssylltiol Normal), sy'n eich galluogi i gyfuno'r undeb mathau (casgliadau o ddau fath neu fwy) a chroestoriad mathau (mathau y mae eu gwerthoedd yn dod o dan sawl math). mathau ar yr un pryd). class Foo { bar swyddogaeth cyhoeddus((A&B)|null $entity) { os ($entity === null) { dychwelyd null; } dychwelyd $entity; } }
  • Mae estyniad newydd “Ar hap” wedi'i gynnig gyda swyddogaethau a dosbarthiadau ar gyfer cynhyrchu rhifau a dilyniannau ffug-hap. Mae'r modiwl yn darparu rhyngwyneb gwrthrych-ganolog, yn eich galluogi i ddewis peiriannau gwahanol ar gyfer cynhyrchu rhifau ffug-hap, gan gynnwys y rhai sy'n addas i'w defnyddio mewn cryptograffeg, ac yn darparu swyddogaethau ategol, er enghraifft, ar gyfer cymysgu araeau a llinynnau ar hap, dewis bysellau arae ar hap, defnydd ar yr un pryd o sawl generadur gyda'ch cyflwr annibynnol eich hun. $rng = $is_production ? newydd Ar hap\Engine\Secure(): new Random\Engine\Mt19937(1234); $randomizer = Hap\Randomizer newydd($rng); $randomizer->shuffleString('foobar');
  • Gweithredwyd trosi achos locale-annibynnol. Mae swyddogaethau fel strtolower() a strtoupper() bellach bob amser yn trosi achos nodau yn yr ystod ASCII fel pe baent wedi'u gosod i'r locale "C".
  • Ychwanegwyd swyddogaethau newydd: 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.
  • Ychwanegwyd dulliau newydd: mysqli:: execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError,ReflectionFunction::isAnonymous,MyfyrioMethod::hasPrototeip.
  • Mae'r gallu i greu priodweddau deinamig mewn dosbarth wedi'i ddiystyru. Yn PHP 9.0, bydd cyrchu eiddo nad ydynt wedi'u diffinio i ddechrau yn y dosbarth yn arwain at wall (ErrorException). Bydd dosbarthiadau sy'n darparu dulliau __get a __set ar gyfer creu eiddo, neu briodweddau deinamig yn stdClass yn parhau i weithio heb unrhyw newidiadau, dim ond gwaith ymhlyg gydag eiddo nad yw'n bodoli fydd yn cael ei gefnogi i amddiffyn y datblygwr rhag bygiau cudd. Er mwyn cadw gwaith yr hen god, cynigir y briodwedd “#[AllowDynamicProperties]”, gan ganiatáu defnyddio priodweddau deinamig.
  • Mae'r gallu i amnewid gwerthoedd newidiol yn llinynnau gan ddefnyddio'r ymadroddion "${var}" a ${(var)} wedi'i anghymeradwyo. Mae cefnogaeth ar gyfer yr amnewidion "{$var}" a "$var" a ddefnyddir yn gyffredin wedi'i gadw. Er enghraifft: "Helo {$world}"; Iawn "Helo $byd"; Iawn "Helo ${world}"; Anghymeradwy: Mae defnyddio ${} mewn llinynnau yn anghymeradwy
  • Galwadau anghymeradwy a gefnogir yn rhannol y gellir eu galw trwy "call_user_func($callable)" ond nid ydynt yn cefnogi galw ar ffurf "$callable()" : "self::method" "riant::method" "statig" ::method " ["hunan", "dull"] [" rhiant", "dull"] [" statig", "dull"] ["Foo", "Bar::dull"] [Foo newydd, "Bar: :method" ]
  • Mae'r gyfarwyddeb error_log_mode wedi'i hychwanegu at y gosodiadau, sy'n eich galluogi i bennu'r modd mynediad i'r log gwall.

Ffynhonnell: opennet.ru

Ychwanegu sylw