new in initializers, and the default that is an object

A constructor with an optional dependency needed a null default and a line of null-coalescing, in every class that had one.

// 8.0
public function __construct(?Logger $logger = null)
{
    $this->logger = $logger ?? new NullLogger();
}

// 8.1
public function __construct(
    private Logger $logger = new NullLogger(),
) {}

// allowed in: parameter defaults, static variable
// initialisers, global constants, attribute arguments.
// NOT in: property defaults, class constants.

The exclusion of property defaults is the one that catches people, and it is deliberate — a property default is evaluated once per class rather than once per instance, so allowing an object there would share it. The parameter is no longer nullable, which is the actual win: the type is honest and every subsequent line can stop checking. It also composes with attributes, which is where a lot of framework configuration becomes readable.