Maison >développement back-end >tutoriel php >Comment remplacer en toute sécurité le modificateur `preg_replace()` `/e` obsolète de PHP par `preg_replace_callback()` ?

Comment remplacer en toute sécurité le modificateur `preg_replace()` `/e` obsolète de PHP par `preg_replace_callback()` ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-19 12:15:16494parcourir

How to Safely Replace PHP's Deprecated `preg_replace()` `/e` Modifier with `preg_replace_callback()`?

Remplacez le modificateur '/e' de preg_replace() par preg_replace_callback()

Les expressions régulières peuvent être intimidantes, en particulier lorsque vous travaillez avec des groupes de capture et des remplacements. Déchiffrons une tâche de remplacement depuis preg_replace() en utilisant le modificateur '/e' :

public static function camelize($word) {
   return preg_replace('/(^|_)([a-z])/e', 'strtoupper("\2")', $word);
}

Ici, le but est de mettre en majuscule la lettre qui suit '^' (début de la chaîne) ou '_' ( soulignement).

Comprendre le modificateur '/e'

Le modificateur '/e' évalue le chaîne de remplacement en tant que code PHP. « 2 » fait référence au deuxième groupe capturé, qui est la petite lettre qui suit le « ^ » ou le « _ ». Ce modificateur, cependant, est obsolète pour des raisons de sécurité.

La transition vers preg_replace_callback()

preg_replace_callback() offre une alternative plus sûre en fournissant une fonction de rappel au lieu d'une chaîne de remplacement :

return preg_replace_callback('/(^|_)([a-z])/', function($matches) {
    return strtoupper($matches[2]);
}, $word);

La fonction de rappel

La fonction anonyme prend un tableau de correspondances comme un argument. Ici, $matches[1] représente le '^' ou '_' et $matches[2] la lettre à mettre en majuscule.

Interchanger les modèles

Notez que le '/e' le modificateur doit être supprimé lors de l'utilisation de preg_replace_callback(). Le modèle ci-dessus se simplifie en :

return preg_replace_callback('/(^|_)([a-z])/', function($matches) {
    return strtoupper($matches[2]);
}, $word);

Portée des variables

Les fonctions anonymes n'ont accès qu'aux variables explicitement importées à l'aide du mot-clé 'use'.

Gotchas

  • Le modificateur '/e' supprime les barres obliques des arguments, contrairement à preg_replace_callback().
  • Le mot-clé 'use' permet d'importer des variables dans le rappel, résolvant ainsi les problèmes de portée des variables.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn