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

Il codice di cui sopra dà un avvertimento deprecazione dopo l'aggiornamento a PHP 5.5:Sostituire deprecato preg_replace/e con preg_replace_callback

Deprecato: preg_replace(): Il modificatore/e è deprecato, utilizzare preg_replace_callback invece

Come posso sostituire il codice con preg_replace_callback()?

risposta

52

È possibile utilizzare una anonymous function per passare le partite per la vostra funzione:

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

Oltre ad essere più veloce, questo sarà anche gestire correttamente le virgolette doppie nella stringa. Il codice corrente che utilizza /e converte una virgola doppia " in \".

Problemi correlati