Bahnhofstraße 22, 52134 Herzogenrath Montag - Freitag: 8:00 - 16:30 kontakt@milnersoftware.de 0176 66798849

Aktuelles · PHP · · 3 Min. Lesezeit

PHP 8.4: „Implicitly marking parameter as nullable is deprecated“ – so beheben Sie es

PHP 8.4 meldet bei vielen älteren Funktionen „Implicitly marking parameter as nullable is deprecated“. Was das bedeutet, warum es so häufig vorkommt und wie Sie es in Minuten beheben.

Zahlenschloss auf einer hellen Computertastatur

Kurz gesagt: Seit PHP 8.4 ist es veraltet, einen Parameter mit einem Typ und dem Standardwert null zu schreiben, ohne den Typ ausdrücklich als „darf null sein“ zu kennzeichnen. Aus string $name = null wird ?string $name = null. Die Seite läuft weiter, solange Hinweise nicht im Browser ausgegeben werden. Die Korrektur ist mechanisch und lässt sich bei großen Projekten mit Werkzeugen automatisch erledigen.

Die Meldung sieht zum Beispiel so aus:

Deprecated: Kunde::speichern(): Implicitly marking parameter $notiz as nullable
is deprecated, the explicit nullable type must be used instead
in /var/www/html/src/Kunde.php on line 42

Was dahintersteckt

Früher machte PHP aus einem Parameter wie diesem stillschweigend einen Parameter, der auch null annehmen darf:

function speichern(string $notiz = null) { … }

Der Typ sagt „string“, der Standardwert ist aber null, also kein Text. PHP hat diesen Widerspruch bisher geduldet. Seit PHP 8.4 gibt es dafür einen Hinweis, in einer späteren Hauptversion soll die Schreibweise ganz wegfallen. Weil sie über viele Jahre üblich war, steckt sie in sehr viel älterem Code, auch in Bibliotheken, Plugins und Frameworks.

So beheben Sie es

Kennzeichnen Sie den Typ ausdrücklich als nullbar. Dafür gibt es zwei Schreibweisen:

// seit PHP 7.1
function speichern(?string $notiz = null) { … }

// seit PHP 8.0
function speichern(string|null $notiz = null) { … }

Beide bedeuten dasselbe. Die Variante mit Fragezeichen ist kürzer und funktioniert ab PHP 7.1. Wer noch ältere PHP-Versionen unterstützen muss, hat ein anderes Problem, siehe PHP 8.2 läuft Ende 2026 aus.

Bei vielen Stellen: automatisch

In großen Projekten sind es schnell Hunderte Stellen. Dafür gibt es Werkzeuge, die den Code automatisch umschreiben:

  • Rector hat eine eigene Regel, die genau diese Fälle findet und ersetzt.
  • PHP-CS-Fixer kann Parameter mit Standardwert null ebenfalls in die ausdrückliche Schreibweise umwandeln.

Lassen Sie solche Werkzeuge auf einer Kopie oder in einem eigenen Git-Zweig laufen und prüfen Sie die Änderungen, bevor sie live gehen.

Wenn der Hinweis aus fremdem Code kommt

Steht der Pfad in vendor/, in einem WordPress-Plugin oder in einer TYPO3-Extension, ändern Sie den Code nicht direkt, denn beim nächsten Update wäre die Änderung weg. Aktualisieren Sie das Paket. Die meisten gepflegten Bibliotheken haben das längst angepasst. Gibt es kein Update, ist das ein Zeichen, dass das Paket nicht mehr gepflegt wird.

Weitere Hinweise in PHP 8.4

PHP 8.4 bringt weitere Änderungen, die bei älterem Code auffallen, etwa dass einige Erweiterungen wie IMAP nicht mehr zum Kern gehören. Verwandte Meldungen aus älteren Versionen behandle ich in „Passing null to parameter … is deprecated“ und „Creation of dynamic property is deprecated“.

Professionelle Hilfe

Ich bringe PHP-Anwendungen auf PHP 8.4, automatisiert, wo es geht, und von Hand, wo es nötig ist, mit Tests vor dem Livegang. Mehr unter PHP-Umstellung beim Hoster und PHP-Fehler beheben.

Geschrieben von Przemysław Milner

Weitere Beiträge