Проблемма с create_function

Статус
В этой теме нельзя размещать новые ответы.

Ramazan

пыщ-пыщ
Регистрация
28 Янв 2007
Сообщения
470
Реакции
101
вообщем есть код
PHP:
$Find    = '\$[a-z_][a-z_0-9]*(?:\[(?:(?:\'[a-z_0-9]+\')|(?:"[a-z_0-9]+")|(?:[0-9]+))\])*';
$Replace = '';
foreach ($Vars as $Key => $Value)
{
	$Value = str_replace("'", '\\\'', $Value);
	if(preg_match("/$Find/i", '$' . $Key))
	{
		$Replace .= "\n$$Key = '$Value';";
	}
}
$Func   = create_function('$Arg', '' . $Replace . 'return eval("return $Arg[1];");');
$Values = preg_replace_callback("/\{($Find)\}/i", $Func, $Values);

Этот код текст в котором имеем примерно следующее
t1 = 'foo';
t2 = {$t1} test
получаем из echo $t2 foo test,
НО У МЕНЯ ВЫЛАЗИЕТ ОШИБКА

Код:
Parse error: syntax error, unexpected T_STRING in Z:\home\test\www\index.php(87) : runtime-created function on line 3

Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '', to be a valid callback in Z:\home\test\www\index.php on line 88

Parse error: syntax error, unexpected T_STRING in Z:\home\test\www\index.php(87) : runtime-created function on line 3

Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '', to be a valid callback in Z:\home\test\www\index.php on line 88

Голова уже кипит, хотя уверен что проблемма легко решаема
 
Проблема в чём?
 
проблемма начинается тут:
$Func = create_function('$Arg', '' . $Replace . 'return eval("return $Arg[1];");');
после чего вылазиет ошибка
$Values = preg_replace_callback("/\{($Find)\}/i", $Func, $Values);
В итоге
t1 = 'foo';
t2 = {$t1} test
не парситься и на выходе даёт
PHP:
echo $t2 // получаем {$t1} test
а должно быть
PHP:
echo $t2 // получаем foo test
 
Не понял - проблема с create_function или с {$t1} test?
Опиши нормально, а то сумбур какой-то у тебя.
 
1. получаем $Vars = array("t1" => 'foo', "t2" => '{$t1} test');
2. Меняем внешний вид:
PHP:
foreach ($Vars as $Key => $Value)
{
    $Value = str_replace("'", '\\\'', $Value);
    if(preg_match("/$Find/i", '$' . $Key))
    {
        $Replace .= "\n$$Key = '$Value';";
    }
}
3. Получаем $Replace равное $t1 = 'foo' и $t2 = {$t1} test
4. Передаём значение $Replace в
PHP:
$Func = create_function('$Arg', '' . $Replace . 'return eval("return $Arg[1];");');
5. При вызове $Func в preg_replace_callback, $Func выдаёт ошибку

В следствии чего не может нормально сработать preg_replace_callback, и выдаёт ошибку


Вот насчёт объяснений, с этим у меня сложно :ah:

Короче мне кажется дело в create_function
 
На первый взгляд:
1. Возможно $Replace не видна в твоей функции.
2. Зачем писать лямбда-функцию, если её можно оформить как обычную и вызвать в preg_replace_callback? Это я к тому, что обыкновенную функцию легче отдебажить, а потом её можно перевести в лямбда-функцию если есть необходимость.
 
Разобрался, ошибка была в значении $Replace, там слэш обратный перед апострофом стоял.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху