该错误可能是由
return preg_replace_callback($e, function($v) use ($s,$r) { return $r[$v[1]]; },$sql);
您可能使用的是 PHP 5.2 或更早版本,它不支持闭包。您可以了解您正在使用的 PHP 版本phpinfo() http://php.net/manual/en/function.phpinfo.php.
您可能需要升级到 PHP 5.3+,或者使用create_function http://php.net/manual/en/function.create-function.php,或者编写一个静态函数并将其作为callback http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback.
这是最后一个选项的示例,使用一个简单的类来存储状态$r
:
class My_callback {
public function __construct($s, $r) {
$this->s = $s; $this->r = $r;
}
function callback($v) { return $this->r[$v[1]]; }
}
function search_replace($s,$r,$sql) {
$e = '/('.implode('|',array_map('preg_quote', $s)).')/';
$r = array_combine($s,$r);
$c = new My_callback($s, $r);
return preg_replace_callback($e, array($c, 'callback'), $sql);
}