PHP str_starts_with und str_ends_with: Leitfaden für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Anfang und Ende von Strings in PHP prüfen?

\n\n

Stell dir vor: Du entwickelst eine Website mit PHP und musst prüfen, ob ein Dateiname auf .jpg endet? Oder ob eine E-Mail mit admin beginnt? Früher waren dafür umständliche Konstrukte mit substr() oder regulären Ausdrücken nötig. Seit PHP 8.0 gibt es jedoch eine elegante Lösung – die Funktionen str_starts_with() und str_ends_with().

\n\n

Das ist nicht nur syntaktischer Zucker. Es sind schnelle, lesbare und sichere Methoden zur String-Verarbeitung, die jeder PHP-Entwickler kennen sollte. In diesem Artikel zeigen wir dir anhand praktischer Beispiele, wie sie funktionieren, vergleichen sie mit alten Ansätzen und helfen dir, typische Fehler zu vermeiden.

\n\n

Was sind str_starts_with und str_ends_with?

\n\n

Beide Funktionen wurden mit PHP 8.0 (veröffentlicht im November 2020) eingeführt. Sie lösen eine einfache Aufgabe: Prüfen, ob ein String einen bestimmten Präfix (Anfang) oder Suffix (Ende) enthält.

\n\n

Funktionssignaturen

\n\n
str_starts_with(string $haystack, string $needle): bool\nstr_ends_with(string $haystack, string $needle): bool
\n\n
    \n
  • $haystack – der String, in dem gesucht wird (der Heuhaufen).
  • \n
  • $needle – der Teilstring, nach dem gesucht wird (die Nadel).
  • \n
  • Rückgabe: true oder false.
  • \n
\n\n

Einfaches Beispiel

\n\n
echo str_starts_with('Hallo, Welt!', 'Hallo'); // true\necho str_ends_with('Hallo, Welt!', 'Welt!');   // true\necho str_starts_with('Hallo, Welt!', 'Welt');  // false
\n\n

Wichtig: Die Funktionen unterscheiden zwischen Groß- und Kleinschreibung. str_starts_with('PHP', 'php') gibt false zurück. Für eine case-insensitive Prüfung solltest du strtolower() oder strtoupper() auf beide Strings anwenden.

\n\n

Praktische Anwendungsbeispiele

\n\n

1. Dateiendung prüfen

\n\n
$dateiname = 'bericht_2024.pdf';\n\nif (str_ends_with($dateiname, '.pdf')) {\n    echo "Das ist ein PDF-Dokument";\n} elseif (str_ends_with($dateiname, '.jpg')) {\n    echo "Das ist ein Bild";\n} else {\n    echo "Unbekanntes Format";\n}
\n\n

Früher wurde dies mit substr($dateiname, -4) gelöst – leicht, sich bei der Suffix-Länge zu vertun. Jetzt liest sich der Code wie normales Englisch: „Der String endet mit“.

\n\n

2. URL- oder E-Mail-Validierung

\n\n
$email = 'benutzer@gmail.com';\n$url = 'https://pythonlib.de';\n\nif (str_ends_with($email, '@gmail.com')) {\n    echo "Gmail-Benutzer";\n}\n\nif (str_starts_with($url, 'https://')) {\n    echo "Sichere Verbindung";\n}
\n\n

3. Array von Strings filtern

\n\n
$dateien = ['bild.jpg', 'dokument.pdf', 'foto.png', 'notizen.txt'];\n\n$bilder = array_filter($dateien, function($datei) {\n    return str_ends_with($datei, '.jpg') || str_ends_with($datei, '.png');\n});\n\nprint_r($bilder); // ['bild.jpg', 'foto.png']
\n\n

Wie es früher funktionierte (und warum die neuen Funktionen besser sind)

\n\n

Vor PHP 8.0 nutzten Entwickler verschiedene Ansätze. Vergleichen wir sie mit den neuen Funktionen.

\n\n

Methode 1: substr()

\n\n
// Alter Weg: Anfang prüfen\nif (substr($string, 0, strlen('präfix')) === 'präfix') { ... }\n\n// Neuer Weg\nif (str_starts_with($string, 'präfix')) { ... }
\n\n

Nachteile des alten Wegs:

\n
    \n
  • Umständlich: Die Länge des Teilstrings muss berechnet werden.
  • \n
  • Fehleranfällig bei negativer Länge (wenn $needle länger ist als $haystack).
  • \n
  • Weniger lesbarer Code.
  • \n
\n\n

Methode 2: strpos()

\n\n
// Alter Weg: Anfang prüfen\nif (strpos($string, 'präfix') === 0) { ... }\n\n// Neuer Weg\nif (str_starts_with($string, 'präfix')) { ... }
\n\n

Mit strpos kann leicht ein logischer Fehler passieren: Wenn du nicht === 0 setzt, sondern nur == false oder == 0 verwendest, kann das zu unerwarteten Ergebnissen führen.

Blogs

Buchempfehlungen