2012-01-23 20 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

相關問題