--TEST-- PHP 8.3 test. @TODO Fix whitespace inside dynamic const fetch, e.g. `Foo::{ $bar }` @TODO Fix whitespace between const type and const name, e.g. `public const string TEST = 'Test1';` --RULESET-- { "@PhpCsFixer": true, "@PHP83Migration": true } --REQUIREMENTS-- {"php": 80300} --EXPECT-- ['bar' => 'BAR']]; echo Foo::{$bar}; echo Foo::{bar()}; echo Foo::{$baz['bar']['bar']}; // https://wiki.php.net/rfc/typed_class_constants enum E { public const string TEST = 'Test1'; } trait T { public const string TEST = E::TEST; } interface I { public const string TEST = E::TEST; } class Foo implements I { use T; public const string TEST = E::TEST; } class Bar extends Foo { public const string TEST = 'Test2'; } // https://www.php.net/manual/en/migration83.new-features.php#migration83.new-features.core.readonly-modifier-improvements $a = new readonly class {}; --INPUT-- ['bar' => 'BAR']]; echo Foo :: {$bar}; echo Foo :: {bar ( )}; echo Foo :: {$baz [ 'bar' ] [ 'bar' ]}; // https://wiki.php.net/rfc/typed_class_constants enum E { const StRiNg TEST = "Test1"; } trait T { const STRING TEST = E::TEST; } interface I { const StrinG TEST = E::TEST; } class Foo implements I { use T; const strIng TEST = E::TEST; } class Bar extends Foo { const string TEST = "Test2"; } // https://www.php.net/manual/en/migration83.new-features.php#migration83.new-features.core.readonly-modifier-improvements $a = New ReadOnly CLASS { };