Placido
Наблюдаю
Вопрос такой, как передать значение в тело функции внутри create_function()?
Два варианта кода
и тот же код внутри метода класса, например
в этом случае "echo $replacement;" внутри create_function() не выдает ничего, соответственно, "echo $newString;" тоже ничего не выдает.
Если в create_function() использовать свойство класса, то получаем ошибку
Как решить эту проблему?
З.Ы. Об опасности использования eval() речь не идет - входящие данные будут тщательно проверяться.
Два варианта кода
PHP:
$string = 'series 3-4';
$pattern = 'series[ ]*(\d+)[ ]*-[ ]*(\d+)';
$modifiers = 'um';
$replacement =
'$match[2] == $match[1] + 1 ? "series $match[1] and $match[2]" : "series $match[1]-$match[2]"';
$newString = preg_replace_callback(
'#' . $pattern . '#' . $modifiers,
create_function('$match', '
global $replacement;
echo $replacement . "<br/>";
return eval(\'return \' . $replacement . \';\');
'),
$string);
echo $newString;
//все в порядке, получаем
//$match[2] == $match[1] + 1 ? "series $match[1] and $match[2]" : "series $match[1]-$match[2]"
//series 3 and 4
PHP:
Class A
{
public function check()
{
$string = 'series 3-4';
$pattern = 'series[ ]*(\d+)[ ]*-[ ]*(\d+)';
$modifiers = 'um';
$replacement =
'$match[2] == $match[1] + 1 ? "series $match[1] and $match[2]" : "series $match[1]-$match[2]"';
$newString = preg_replace_callback(
'#' . $pattern . '#' . $modifiers,
create_function('$match', '
global $replacement;
echo $replacement;
return eval(\'return \' . $replacement . \';\');
'),
$string);
echo $newString;
}
}
$a = new A;
$a->check();//пусто
Если в create_function() использовать свойство класса, то получаем ошибку
PHP:
...
create_function('$match',
'return eval(\'return \' . $this->replacement . \';\');')
...
//Fatal error: Using $this when not in object context
З.Ы. Об опасности использования eval() речь не идет - входящие данные будут тщательно проверяться.