在PHP程序中,高低版本之间有函数的过时情况存在。
在高版本的PHP程序中,如果有以下代码:
function get_val($val)
{
if (strrpos($val, '[') !== false)
{
$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);
}
}
运行代码调用 get_val函数时
$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val); 此句可能会出现如下提示:
PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callabck in .....
只要将函数 preg_replace 用 preg_replace_callabck 函数替代即可。
function get_val($val)
{
if (strrpos($val, '[') !== false)
{
$val = preg_replace_callback("/\[([^\[\]]*)\]/is", function($r){return '.'.str_replace('$','\$',$r[1]);}, $val);
}
}
例子2:
$string = 'The quick brown fox jumped over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
echo preg_replace_callback($patterns, function($replacements){ return implode(' ',$replacements);}, $string);
这两句输出的结果一样。