Dynamic properties are deprecated, and that is the feature

Assigning to an undeclared property has silently created one since PHP 4, which means every typo in a property name has been a working assignment to the wrong thing.

class Order
{
    public int $total = 0;
}

$order = new Order();
$order->totl = 500;
// 8.1: creates a property. no notice. $order->total is 0.
// 8.2: Deprecated: Creation of dynamic property
//      Order::$totl is deprecated
// 9.0: Error

The deprecation is the whole value — the runtime behaviour is unchanged and the notice is the first time the engine has ever objected. Classes extending stdClass, and stdClass itself, are unaffected, as are classes implementing __get and __set, which covers most of the legitimate uses. Promoting the notice to an exception in the test environment is how the remaining ones get found before 9.0.