PHP 8.2 introduces various modifications, as it's a major release.
This new version seems to deprecate common structures used by developers, so you might want to look into the changelog. Here are some notable ones, to me.
Dynamic properties: deprecated
class Product {
}
$product = new Product();
$product->title = 'The Game Changer';
The above shortcut is not uncommon in PHP scripts, even if it has never been the recommended way.
You'll have to declare your properties now. Otherwise, you'll get a warning in PHP 8.2:
Deprecated: Creation of dynamic property[...]
It's worth mentioning dynamic properties are still valid if you use the built-in stdClass
class:
$test = new stdClass();
$test->my_property = 'test';
Devs who might want to keep using dynamic properties in other classes (e.g., custom classes) will have to use the new #[\AllowDynamicProperties]
attribute to explicitly allow such usage (opt-in).
String interpolation: deprecated
Don't panic, only a specific syntax will deprecated:
$myvar = "ok";
echo "${myvar}";
The invalid syntax is when the $
sign is outside the curly braces.
In constrast, "{$myvar}"
is still valid.
utf8_encode
/utf8_decode
: deprecated
This deprecation might look weird, as utf8_encode
and utf8_decode
are massively [mis]used, but many devs ignore that it only encodes/decodes from ISO-8859-1 (Latin1).
Wrap up
Deprecated does not mean fatal error, but it's important to fix such warnings when migrating from an older version of PHP.