2012-01-23 38 views
2

我有一个preg_replace_callback它采用闭包(匿名)函数作为第二个参数,它在本地工作上完美无瑕,但是当我将其部署到实际环境时,它会导致错误=>内部服务器错误500.当我删除闭合它的作品。作为preg_replace_callback的参数的PHP封闭函数导致内部服务器错误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。 我的开发环境是代码点火器。

+3

您的生产服务器不输出错误,这是很好的设计。你可以检查错误日志,让我们知道实际的错误是什么? –

+1

任何你的开发环境中没有php 5.3的机会? – boobiq

+0

Like @boobiq我猜你的服务器很可能没有使用PHP 5.3 – rdlowrey

回答

1

匿名函数只能在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 ""; 
     }' 
    ) 
); 

当然没有测试过。

+1

谢谢。但我不喜欢写代码作为一个字符串。所以我传递了像数组这样的函数($ this,'functionName')并在类的主体中声明它:private function functionName。谢谢:) –

+0

是的,那将是另一种选择。我不确定它是否适用于私人功能,但我认为您已经过测试。 – Arjan

相关问题