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

Aktuelles · PHP · · 3 Min. Lesezeit

„Passing null to parameter of type string is deprecated“: Bedeutung und Lösung

Seit PHP 8.1 füllt diese Meldung bei vielen Seiten das Fehlerprotokoll. Was sie bedeutet, warum sie in PHP 9 zum echten Fehler werden kann und wie Sie den Code sauber anpassen.

Startseite von Shuttle Service Hoffmann: «Ihr persönlicher Chauffeur & Shuttle Service» neben einem schwarzen Van

Kurz gesagt: Seit PHP 8.1 warnt PHP, wenn Sie einer eingebauten Funktion wie strlen(), trim() oder htmlspecialchars() den Wert null übergeben, obwohl sie einen Text erwartet. Noch läuft die Seite weiter, es ist nur ein Hinweis (Deprecated). Die Lösung ist, an der genannten Stelle dafür zu sorgen, dass ein Text ankommt, meist mit ?? ''. Die Meldung zu unterdrücken, verschiebt das Problem nur.

Die vollständige Meldung sieht zum Beispiel so aus:

Deprecated: trim(): Passing null to parameter #1 ($string) of type string
is deprecated in /var/www/html/inc/kunden.php on line 87

Sie taucht typischerweise direkt nach der Umstellung auf PHP 8.1 oder neuer auf, und zwar nicht einmal, sondern tausendfach. Fehlerprotokolle wachsen dann in wenigen Tagen auf mehrere Gigabyte, und manche Hoster sperren bei vollem Speicher die Seite.

Was die Meldung bedeutet

Eingebaute PHP-Funktionen haben festgelegte Typen für ihre Parameter. trim() erwartet einen Text (string). Bis PHP 8.0 hat PHP null stillschweigend in einen leeren Text umgewandelt. Seit PHP 8.1 ist dieses Verhalten als veraltet markiert. In einer späteren Hauptversion soll daraus ein echter Fehler werden, und dann bricht die Seite an genau diesen Stellen ab.

Woher das null kommt

  • Leere Datenbankfelder. Eine Spalte, die NULL enthält, kommt in PHP als null an, zum Beispiel ein fehlender Firmenname beim Kunden.
  • Fehlende Formularfelder. $_POST['telefon'] ?? null oder Funktionen, die bei fehlenden Werten null liefern.
  • Funktionen ohne Rückgabe. Eine eigene Funktion, die in einem Zweig nichts zurückgibt, liefert null.
  • Plugins und Themes. In WordPress stammen viele dieser Meldungen aus Plugins, die noch nicht an PHP 8.1 angepasst sind.

So beheben Sie es

Die Meldung nennt Datei und Zeile. Dort gibt es je nach Fall drei saubere Lösungen:

1. Standardwert mit ??

// vorher
$name = trim($kunde['firma']);

// nachher
$name = trim($kunde['firma'] ?? '');

Der Operator ?? nimmt den rechten Wert, wenn der linke null ist oder nicht existiert. Das ist die häufigste und meist richtige Lösung.

2. Bewusst prüfen

if ($kunde['firma'] !== null) {
    $name = trim($kunde['firma']);
}

Sinnvoll, wenn ein fehlender Wert etwas anderes bedeutet als ein leerer, zum Beispiel wenn dann ein anderer Text angezeigt werden soll.

3. An der Quelle beheben

Kommt das null aus einer eigenen Funktion, lassen Sie die Funktion immer einen Text zurückgeben. Kommt es aus der Datenbank und sollte das Feld nie leer sein, ist ein Standardwert in der Tabelle die bessere Lösung.

Was Sie nicht tun sollten

  • Meldungen global abschalten mit error_reporting(E_ALL & ~E_DEPRECATED). Im Produktivbetrieb sollten Hinweise ohnehin nicht angezeigt werden, aber im Protokoll brauchen Sie sie, um die Stellen zu finden, bevor sie zu Fehlern werden.
  • Mit @ unterdrücken. @trim($x) versteckt das Symptom und macht den Code langsamer und schwerer zu lesen.
  • Überall (string) davorsetzen. Ein blindes (string) funktioniert, verdeckt aber Fälle, in denen ein fehlender Wert eigentlich ein Fehler ist.

Bei WordPress-Seiten

Stammt die Meldung aus wp-content/plugins/… oder wp-content/themes/…, ändern Sie den Code nicht direkt, denn beim nächsten Update ist die Änderung weg. Aktualisieren Sie zuerst das Plugin oder Theme. Hilft das nicht, melden Sie den Fehler beim Hersteller. Im Produktivbetrieb gehören solche Hinweise nur ins Protokoll, nicht auf die Seite. Wie Sie WordPress sicher auf eine neue PHP-Version bringen, steht in WordPress auf eine neue PHP-Version umstellen.

Professionelle Hilfe

In älteren Anwendungen sind es oft Hunderte solcher Stellen. Ich gehe sie systematisch durch, behebe sie an der Quelle und sorge dafür, dass Ihr Code auch die nächsten PHP-Versionen übersteht. Mehr unter PHP-Fehler beheben: Analyse für 150 € netto, Behebung ab 290 € netto.

Geschrieben von Przemysław Milner

Weitere Beiträge