PHP str_starts_with et str_ends_with : analyse pour débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi vérifier le début et la fin d'une chaîne en PHP ?

\n\n

Imaginez : vous écrivez un site en PHP et vous devez vérifier si le nom de fichier se termine par .jpg ? Ou si l'email commence par admin ? Avant, il fallait utiliser des bricolages avec substr() ou des expressions régulières. Mais depuis PHP 8.0, nous avons une solution élégante — les fonctions str_starts_with() et str_ends_with().

\n\n

Ce n'est pas simplement du sucre syntaxique. Ce sont des moyens rapides, lisibles et sûrs de travailler avec les chaînes, que tout développeur PHP devrait connaître. Dans cet article, nous les analyserons avec des exemples concrets, les comparerons aux anciennes approches et montrerons comment éviter les erreurs typiques.

\n\n

Que sont str_starts_with et str_ends_with ?

\n\n

Les deux fonctions sont apparues dans PHP 8.0 (sorti en novembre 2020). Elles résolvent une tâche simple : vérifier si une chaîne contient un préfixe (début) ou un suffixe (fin) donné.

\n\n

Signature des fonctions

\n\n
str_starts_with(string $haystack, string $needle): bool\nstr_ends_with(string $haystack, string $needle): bool
\n\n
    \n
  • $haystack — la chaîne dans laquelle on cherche (la botte de foin).
  • \n
  • $needle — la sous-chaîne que l'on cherche (l'aiguille).
  • \n
  • Retournent true ou false.
  • \n
\n\n

Exemple simple

\n\n
echo str_starts_with('Bonjour, le monde !', 'Bonjour'); // true\necho str_ends_with('Bonjour, le monde !', 'monde !');   // true\necho str_starts_with('Bonjour, le monde !', 'monde');  // false
\n\n

Important : les fonctions sont sensibles à la casse. str_starts_with('PHP', 'php') retournera false. Si vous avez besoin d'une comparaison insensible à la casse, utilisez strtolower() ou strtoupper() sur les deux chaînes.

\n\n

Exemples concrets d'utilisation

\n\n

1. Vérification de l'extension de fichier

\n\n
$filename = 'rapport_2024.pdf';\n\nif (str_ends_with($filename, '.pdf')) {\n    echo "C'est un document PDF";\n} elseif (str_ends_with($filename, '.jpg')) {\n    echo "C'est une image";\n} else {\n    echo "Format inconnu";\n}
\n\n

Avant, cela se faisait avec substr($filename, -4) — facile de se tromper sur la longueur du suffixe. Maintenant, le code se lit comme un anglais courant : « la chaîne se termine par ».

\n\n

2. Validation d'URL ou d'email

\n\n
$email = 'utilisateur@gmail.com';\n$url = 'https://pythonlib.ru';\n\nif (str_ends_with($email, '@gmail.com')) {\n    echo "Utilisateur Gmail";\n}\n\nif (str_starts_with($url, 'https://')) {\n    echo "Connexion sécurisée";\n}
\n\n

3. Filtrage d'un tableau de chaînes

\n\n
$files = ['image.jpg', 'document.pdf', 'photo.png', 'notes.txt'];\n\n$images = array_filter($files, function($file) {\n    return str_ends_with($file, '.jpg') || str_ends_with($file, '.png');\n});\n\nprint_r($images); // ['image.jpg', 'photo.png']
\n\n

Comment cela fonctionnait avant (et pourquoi les nouvelles fonctions sont meilleures)

\n\n

Avant PHP 8.0, les développeurs utilisaient plusieurs approches. Comparons-les avec les nouvelles fonctions.

\n\n

Méthode 1 : substr()

\n\n
// Ancienne méthode : vérification du début\nif (substr($string, 0, strlen('prefix')) === 'prefix') { ... }\n\n// Nouvelle méthode\nif (str_starts_with($string, 'prefix')) { ... }
\n\n

Inconvénients de l'ancienne méthode :

\n
    \n
  • Verbeux : il faut calculer la longueur de la sous-chaîne.
  • \n
  • Risque d'erreur avec une longueur négative (si $needle est plus long que $haystack).
  • \n
  • Code moins lisible.
  • \n
\n\n

Méthode 2 : strpos()

\n\n
// Ancienne méthode : vérification du début\nif (strpos($string, 'prefix') === 0) { ... }\n\n// Nouvelle méthode\nif (str_starts_with($string, 'prefix')) { ... }
\n\n

Avec strpos, il est facile de commettre une erreur logique : si on n'utilise pas === 0, mais simplement == false ou == 0

Blogs

Book Recommendations