De eerste alfa-release van de nieuwe tak van de programmeertaal PHP 8.2 is gepresenteerd. De officiële lancering is gepland voor 24 november. De belangrijkste vernieuwingen die nu beschikbaar zijn voor testen of gepland staan voor implementatie in PHP 8.2 zijn:
- Er zijn aparte types "false" en "null" toegevoegd, die bijvoorbeeld gebruikt kunnen worden om een foutindicatie of een lege waarde van een functie terug te geven. Eerder konden "false" en "null" alleen in combinatie met andere types worden gebruikt (zoals "string|false"), maar nu kunnen ze afzonderlijk worden toegepast: function alwaysFalse(): false { return false; }
- Er is een mogelijkheid toegevoegd om een klasse alleen-lezen te markeren. Eigenschappen in dergelijke klassen kunnen slechts één keer worden ingesteld, waarna ze niet meer gewijzigd kunnen worden. Eerder konden alleen afzonderlijke eigenschappen van een klasse als alleen-lezen worden gemarkeerd, maar nu kan deze modus in één keer voor alle klasse-eigenschappen worden ingeschakeld. Het aangeven van de "readonly"-vlag op het klasse-niveau blokkeert ook het dynamisch toevoegen van eigenschappen aan de klasse. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = ‘wrong’; // Fout: Kan dynamische eigenschap Post::$unknown niet aanmaken
- De mogelijkheid om dynamisch eigenschappen in een klasse aan te maken (zoals "post->unknown" in het bovenstaande voorbeeld) wordt als verouderd beschouwd. In PHP 9.0 zal het verwijzen naar eigenschappen die oorspronkelijk niet zijn gedefinieerd in de klasse leiden tot een fout (ErrorException). Klasses die de methoden __get en __set bieden voor het aanmaken van eigenschappen, of dynamische eigenschappen in stdClass zullen zonder wijzigingen blijven werken, maar de ondersteuning voor impliciet werken met niet-bestaande eigenschappen wordt stopgezet om de ontwikkelaar te beschermen tegen verborgen fouten. Om de werking van oude code te behouden, is er een attribuut "#[AllowDynamicProperties]" voorgesteld, dat het gebruik van dynamische eigenschappen toestaat.
- Er is een mogelijkheid toegevoegd om vertrouwelijke parameters in de stack trace-gegevens, die tijdens een fout worden weergegeven, te filteren. Het verwijderen van bepaalde informatie kan nodig zijn wanneer informatie over de opkomende fouten automatisch naar externe diensten wordt verzonden die problemen volgen en ontwikkelaars hierover informeren. Bijvoorbeeld, je kunt parameters uitsluiten van de trace die gebruikersnamen, wachtwoorden en omgevingsvariabelen bevatten. 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
- De mogelijkheid om variabelen in strings te substitueren met behulp van de expressies «${var}» en «${(var)}» is verouderd verklaard. Ondersteuning voor de gebruikelijke substituties «{$var}» en «$var» blijft behouden. Bijvoorbeeld: «Hello {$world}»; OK «Hello $world»; OK «Hello ${world}»; Deprecated: Using ${} in strings is deprecated
- De gedeeltelijk ondersteunde oproepbare objecten (callable), die kunnen worden aangeroepen via «call_user_func($callable)», maar niet de aanroep in de vorm van «$callable()» ondersteunen, zijn verouderd verklaard: «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
- Een locale-onafhankelijke karaktercase conversie is geïmplementeerd. Functies zoals strtolower() en strtoupper() zetten nu altijd het karaktercase in het ASCII-bereik om, ongeacht de ingestelde locale «C».
Bron: opennet.ru
