wake-up-neo.com

Ersetzen Sie veraltetes preg_replace / e durch 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
);

Der obige Code gibt nach dem Upgrade auf PHP 5.5 eine Warnung vor Verfall:

Veraltet: preg_replace (): Der Modifikator/e ist veraltet. Verwenden Sie stattdessen preg_replace_callback

Wie kann ich den Code durch preg_replace_callback() ersetzen?

44
dima.h

Sie können eine anonyme Funktion verwenden, um die Übereinstimmungen an Ihre Funktion zu übergeben:

$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
);

Dies ist nicht nur schneller, sondern behandelt auch doppelte Anführungszeichen in Ihrer Zeichenfolge. Ihr aktueller Code mit /e Würde ein doppeltes Anführungszeichen " In \" Konvertieren.

66
NikiC