Den första alfa-versionen av den nya grenen av programmeringssprÄket PHP 8.2 har presenterats. UtgÄvan Àr planerad till den 24 november. De viktigaste nyheterna, som redan Àr tillgÀngliga för testning eller planeras att implementeras i PHP 8.2:
- Separata typer för "false" och "null" har lagts till, som kan anvÀndas för att returnera ett felmeddelande eller ett tomt vÀrde frÄn en funktion. Tidigare kunde "false" och "null" endast anvÀndas i kombination med andra typer (till exempel "string|false"), men nu kan de anvÀndas separat: function alwaysFalse(): false { return false; }
- Det har lagts till möjlighet att markera en klass som endast lĂ€sbar. Egenskaper i sĂ„dana klasser kan bara sĂ€ttas en gĂ„ng och kommer sedan inte att kunna Ă€ndras. Tidigare kunde endast enskilda klassattribut markeras som endast lĂ€sbara, men nu kan detta lĂ€gen aktiveras för alla klassens egenskaper pĂ„ en gĂ„ng. Att ange "readonly"-flaggan pĂ„ klassnivĂ„ blockerar ocksĂ„ dynamisk tillĂ€ggning av egenskaper till klassen. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* ⊠*/); $post->unknown = âwrongâ; // Fel: Kan inte skapa dynamisk egenskap Post::$unknown
- Möjligheten att dynamiskt skapa egenskaper i klassen har förklarats som förÄldrad (som "post->unknown" i exemplet ovan). I PHP 9.0 kommer försök att komma Ät egenskaper som inte ursprungligen har definierats i klassen att resultera i ett fel (ErrorException). Klasser som tillhandahÄller metoderna __get och __set för att skapa egenskaper, eller dynamiska egenskaper i stdClass kommer fortsatt att fungera utan Àndringar, men det kommer att upphöra att stödja implicit arbete med icke-existerande egenskaper för att skydda utvecklaren frÄn dolda fel. För att bevara funktionaliteten i gammal kod har attributet "#[AllowDynamicProperties]" föreslagits, vilket tillÄter anvÀndning av dynamiska egenskaper.
- Möjlighet till filtrering av konfidentiella parametrar i stackspĂ„rningsdata som skrivs ut vid fel. Uteslutning av viss information kan krĂ€vas nĂ€r information om uppkomna fel automatiskt skickas till externa tjĂ€nster som spĂ„rar problem och informerar utvecklarna. Till exempel kan parametrar som innehĂ„ller anvĂ€ndarnamn, lösenord och miljövariabler uteslutas frĂ„n spĂ„rningen. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception(âErrorâ); } test(âfooâ, âpasswordâ, âbazâ); Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test(âfooâ, Object(SensitiveParameterValue), âbazâ) #1 {main} thrown in test.php on line 8
- Möjligheten att anvÀnda variabelersÀttning i strÀngar med uttrycken «${var}» och ${(var)}» har förklarats som avvecklad. Stöd för de vanligen anvÀnda ersÀttningarna «{$var}» och «$var» kvarstÄr. Till exempel: «Hello {$world}»; OK «Hello $world»; OK «Hello ${world}»; Deprecated: Using ${} in strings is deprecated
- Delvis stödda anropbara objekt (callable) som kan anropas via «call_user_func($callable)» men som inte stödjer anrop i form av «$callable()» har förklarats som avvecklade: «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
- Kulturoberoende konvertering av teckenstorlek har implementerats. Funktioner som strtolower() och strtoupper() konverterar nu alltid teckenstorleken i ASCII-intervallet likt nÀr kulturen Àr instÀlld pÄ «C».
KĂ€lla: opennet.ru
