PHP: Как сделать переменную видимой в create_function()?
Этот код:
$t = 100;
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
create_function(
'$matches',
'return $matches[1] + $t;'
), $func);
Как сделать $t видимым из create_function() в функции preg_replace()?
5 ответов
Анонимная функция будет работать, используя при этом use
синтаксис:
$t = 100;
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
function($matches) use($t) // $t will now be visible inside of the function
{
return $matches[1] + $t;
}, $func);
Вы не можете сделать переменную доступной, но в вашем случае вы можете просто использовать значение:
$t = 100;
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
create_function(
'$matches',
'return $matches[1] + ' . $t .';'
), $func);
Тем не менее, настоятельно рекомендуется использовать function($matches) use ($t) {}
синтаксис здесь ( http://php.net/functions.anonymous).
И есть модификатор Eval для preg_replace
:
$str = preg_replace("/(Name[A-Z]+[0-9]*)/e", '$1+'.$t, $func);
Но у меня такое ощущение, что ваша функция в любом случае использует неправильный оператор - или неправильный шаблон / подшаблон.
В анонимном просто использовать ключевое слово use или global в create_function использовать global
Функция () использовать ($var1,$var2... и т. д.){код здесь}
или же
create_func($args,'global $var1,$var2; код здесь;');
Так же, как вы заставляете любую функцию видеть глобальную переменную.
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
create_function(
'$matches',
'global $t; return $matches[1] + $t;'
), $func);
Ты можешь использовать $GLOBALS
но это не очень рекомендуется...
$str = preg_replace_callback ( "/(Name[A-Z]+[0-9]*)/", create_function ( '$matches', 'return $matches[1] + $GLOBALS["t"];' ), $func );
Лучшее решение
http://php.net/functions.anonymous анонимная функция.. если вы не любите использовать, вы также можете сделать array_walk
( http://php.net/manual/en/function.array-walk.php) после получения результата в формате массива передайте $t
как правильный аргумент функции