Schluss mit Workarounds: str_starts_with und str_ends_with in PHP 8 kennenlernen
\n\nHaben Sie jemals Code wie if (strpos($str, 'prefix') === 0) geschrieben und das Gefühl gehabt, dass das irgendwie umständlich aussieht? Oder haben Sie Zeit damit verbracht, substr($str, -3) === 'end' zu entschlüsseln, um das Ende eines Strings zu prüfen? Wenn ja – ich habe großartige Neuigkeiten für Sie. Seit PHP 8.0 gibt es in der Sprache zwei elegante und intuitiv verständliche Funktionen: str_starts_with() und str_ends_with().
In diesem Artikel werden wir sie gründlich durchleuchten. Sie erfahren, wie sie funktionieren, wie sie sich von alten Ansätzen unterscheiden und warum Sie sie in jedem modernen PHP-Projekt verwenden sollten. Wir betrachten auch reale Beispiele aus der Entwicklerpraxis – von der URL-Überprüfung bis zur E-Mail-Validierung und der Arbeit mit Dateipfaden.
\n\nWas sind str_starts_with() und str_ends_with()?
\n\nDies sind eingebaute PHP 8-Funktionen, mit denen Sie prüfen können, ob ein String mit einer bestimmten Teilzeichenkette beginnt oder endet. Sie geben einen booleschen Wert (true oder false) zurück, was sie ideal für die Verwendung in Bedingungen macht.
Hier ist ihre grundlegende Syntax:
\n\nstr_starts_with(string $haystack, string $needle): bool\nstr_ends_with(string $haystack, string $needle): bool\n\nWobei $haystack der String ist, den Sie prüfen, und $needle die Teilzeichenkette, die Sie am Anfang oder Ende suchen.
Einfaches Beispiel
\n\n<?php\n$string = "Hallo, Welt!";\n\n// Prüfen, ob der String mit "Hallo" beginnt\nif (str_starts_with($string, "Hallo")) {\n echo "Der String beginnt mit 'Hallo'"; // Dieser Code wird ausgeführt\n}\n\n// Prüfen, ob der String mit "Welt!" endet\nif (str_ends_with($string, "Welt!")) {\n echo "Der String endet mit 'Welt!'"; // Und dieser auch\n}\n?>\n\nEinfach, oder? Keine zusätzlichen Berechnungen, kein === 0 oder strlen(). Einfach prüfen und Ergebnis erhalten.
Warum ist das wichtig? Probleme alter Ansätze
\n\nVor PHP 8 mussten Entwickler tricksen. Die gängigste Methode, den Anfang eines Strings zu prüfen, sah so aus:
\n\nif (strpos($string, 'prefix') === 0) { ... }\n\nWas ist das Problem dabei? strpos() sucht die Teilzeichenkette überall im String, nicht nur am Anfang. Ja, die Prüfung === 0 filtert falsche Ergebnisse heraus, aber der Code selbst sagt nichts über die Absicht des Entwicklers aus. Sie sehen ihn an und denken: "Aha, er prüft, ob es beginnt mit... oder sucht er einfach?" – das verringert die Lesbarkeit.
Und die Prüfung des String-Endes war noch weniger intuitiv:
\n\nif (substr($string, -3) === 'end') { ... }\n\nHier müssen Sie die genaue Länge der Teilzeichenkette kennen (-3), was zu Fehlern führt, wenn Sie eine falsche Zahl angeben. Außerdem: Wenn die Teilzeichenkette länger als der String selbst ist, gibt substr() einfach einen leeren String zurück, und die Bedingung wird nie erfüllt.
Die neuen Funktionen str_starts_with() und str_ends_with() lösen all diese Probleme:
- \n
- Lesbarkeit: Der Code spricht für sich selbst. \n
- Zuverlässigkeit: Sie müssen nicht über die Länge der Teilzeichenkette oder leere Strings nachdenken. \n
- Leistung: Die Funktionen sind auf Kernel-Ebene von PHP optimiert. \n
Reale Anwendungsbeispiele in der Webentwicklung
\n\nSchauen wir uns an, wo diese Funktionen in der Praxis nützlich sein können. Ich habe einige Szenarien ausgewählt, die Sie in Ihrer Arbeit sicherlich schon gesehen haben.
\n\n1. Prüfung von URL-Präfixen (Routing, Weiterleitungen)
\n\nAngenommen, Sie schreiben einen einfachen Router und möchten URLs verarbeiten, die mit /admin beginnen:
<?php\n$uri = $_SERVER['REQUEST_URI'];\n\nif (str_starts_with($uri, '/admin')) {\n echo "Sie sind im Admin-Bereich";\n // Admin-Controller laden\n}