여기서 문제는 범위입니다. 이와 비슷한 것은 JavaScript에서 작동하지만 JS와 PHP는 범위를 다르게 처리합니다. 익명 함수의 범위에서 에 액세스하려면 전역 함수로 선언해야합니다. 나중에 PHP 5.3.0 이상을 사용한다면
<?php
$code = preg_replace_callback('/_e\(\'(.*?)\'\)/',
create_function('$matches',
"return $GLOBALS['translator']->translate($matches);"),
$code);
?>
, 이것은 폐쇄로 완화 할 수있다 : 당신이 한 라이너로 익명을 유지하려면
<?php
$code = preg_replace_callback('/_e\(\'(.*?)\'\)/',
create_function('$matches',
'global $translator;'.
'return $translator->translate($matches);'),
$code);
?>
, 당신은 전역 배열을 사용할 수 있습니다 및 use
:이 $code
가 동일한 범위에서 생성되었다고 가정한다
<?php
$code = preg_replace_callback('/_e\(\'(.*?)\'\)/',
function($matches) use ($translator) {
return $translator->translate($matches);
}, $code);
?>
.
'translate()'메소드가 필요합니다. 하나의 매개 변수 ('$ matches' 배열) 만 가져 와서 문자열을 반환해야합니다. – ridgerunner
시도해보기 위해'global $ translator;'줄을 추가해보십시오. –
Google 번역은 올해 비즈니스가 중단되며, 여러분은 그것에 의존해서는 안됩니다. –