Php闭包函数作为preg_replace_callback的参数会导致内部服务器错误500


Php closure function as parameter to preg_replace_callback results in Internal Server Error 500

我有一个preg_replace_callback,它将闭包(匿名)函数作为第二个参数,它在本地运行非常好,但当我将其部署到实时环境时,会导致错误=>内部服务器错误500。当我移除闭包时,它就起作用了。

$regExPattern = '/'<%(?<content>.*?)%'>/';
$template = preg_replace_callback($regExPattern, function ($matches)  use ($dataItem) {
    if(isset($dataItem[trim($matches['content'])])) {
        return $dataItem[trim($matches['content'])];
    }
    else {
        return '';
    }
}, $template);

任何关于我如何解决这个问题的建议。我需要在回调函数中使用$dataItem,并将其传递给preg_replace_callback。我的开发环境是代码点火器。

匿名函数只能在PHP 5.3及更高版本中使用。您可以使用create_function()代替:

$regExPattern = '/'<%(?<content>.*?)%'>/';
$template = preg_replace_callback($regExPattern, create_function(
      '$matches'
    , 'if(isset($dataItem[trim($matches[''content''])])) {
          return $dataItem[trim($matches[''content''])];
      }
      else {
          return "";
      }'
    )
);

当然是未经测试的。