web-dev-qa-db-fra.com

Remplacez obsolète preg_replace / e par preg_replace_callback

$result = preg_replace(
    "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/iseU", 
    "CallFunction('\\1','\\2','\\3','\\4','\\5')",
    $result
);

Le code ci-dessus donne un avertissement de dépréciation après la mise à niveau vers PHP 5.5:

Obsolète: preg_replace (): le modificateur/e est obsolète, utilisez preg_replace_callback à la place

Comment puis-je remplacer le code avec preg_replace_callback()?

44
dima.h

Vous pouvez utiliser un fonction anonyme pour transmettre les correspondances à votre fonction:

$result = preg_replace_callback(
    "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/isU",
    function($m) { return CallFunction($m[1], $m[2], $m[3], $m[4], $m[5]); },
    $result
);

En plus d'être plus rapide, cela gérera également les guillemets doubles dans votre chaîne. Votre code actuel en utilisant /e convertirait une citation double " en \".

66
NikiC