這裏的問題是範圍。類似這樣的東西可以在JavaScript中工作,但JS和PHP處理範圍的方式不同。要從匿名函數的範圍內訪問,您需要將其聲明爲全局函數。
<?php
$code = preg_replace_callback('/_e\(\'(.*?)\'\)/',
create_function('$matches',
'global $translator;'.
'return $translator->translate($matches);'),
$code);
?>
如果你想要保持匿名的一行代碼,您可以使用全局變量數組:
<?php
$code = preg_replace_callback('/_e\(\'(.*?)\'\)/',
create_function('$matches',
"return $GLOBALS['translator']->translate($matches);"),
$code);
?>
如果你有PHP 5.3.0或更高版本,這可以用封閉緩解和use
:
<?php
$code = preg_replace_callback('/_e\(\'(.*?)\'\)/',
function($matches) use ($translator) {
return $translator->translate($matches);
}, $code);
?>
這是假設中相同的範圍創建爲$code
。
需要看'translate()'方法。它只需要一個參數('$ matches'數組)並返回一個字符串。 – ridgerunner
嘗試添加'全球$譯者;'線,只是試試... –
谷歌翻譯今年將停業,你不應該依賴它。 –