I've been recently contacted by a person who complained that after he migrated his hosting to PHP 8.3, he got dozens of PHP warnings of the type "Creation of dynamic property ... is deprecated" in many different files.
So I decided to make this post to explain why this happens and how to fix it.
In general the deprecation warning seen in PHP 8.3, "Creation of dynamic property ... is deprecated," indicates that the code is using dynamic properties in a way that is discouraged or considered outdated. This deprecation warning is a part of PHP's effort to improve code quality and maintainability by discouraging certain practices that may lead to errors or unintended behavior.
Dynamic properties refer to the ability to create object properties on-the-fly without declaring them explicitly in the class definition. For example:
class SomeClass {
public function __construct() {
$this->newProperty = 'Some value'; }
}
$obj = new SomeClass ();
echo $obj->newProperty;
Starting from PHP 8.0, using dynamic properties without declaring them in the class definition triggers a deprecation warning. In PHP 8.3, it seems this deprecation is becoming more prominent.
To resolve this issue, it's necessary to declare all the properties in the class explicitly.
For example:
class SomeClass {
public $newProperty;
public function __construct() {
$this->newProperty = 'Some value';
}
}
$obj = new SomeClass ();
echo $obj->newProperty;
The idea is that when declaring properties in the class, one makes the code more readable, maintainable, and less prone to errors.
It also helps IDEs and static analysis tools provide better code assistance and catch potential issues during development ...