无法将带有修饰符 /e 的 preg_replace() 转换为 preg_replace_callback()
Can't convert preg_replace() with modifier /e to preg_replace_callback()
我正在使用 preg_replace()
将 {#page}
替换为变量 $page
的实际值。当然我有很多{#variable}
,不只是{#page}
.
例如:
$uri = "module/page/{#page}";
$page = 3;
//preg_replace that its working now
$uri_to_call = $uri_rule = preg_replace('/\{\#([A-Za-z_]+)\}/e', "$", $uri);
我得到了结果
"module/page/3";
更新到 PHP 5.4 后出现错误:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
而且我不知道如何用 preg_replace_callback()
重写 preg_replace()
。
我试着按照 SO Replace preg_replace() e modifier with preg_replace_callback
的回答
像这样:
public static function replace_vars($uri) { //$uri_rule = preg_replace('/\{\#([A-Za-z_]+)\}/e', "$", $uri);
return preg_replace_callback('/{\#([A-Za-z_]+)\}/',
create_function ('$matches', 'return $$matches[1];'), $uri);
}
但我也收到警告:
Notice: Undefined variable: page
这实际上是正确的,因为它没有设置运行时创建函数的页面变量。
谁能帮帮我?
正如您所知,您的问题是您的变量超出了匿名函数的范围,并且由于您不知道要替换哪个变量,因此您无法将它们传递给函数,因此您必须使用 global
关键字,例如
$uri = "module/page/{#page}";
$page = 3;
$uri_to_call = $uri_rule = preg_replace_callback("/\{\#([A-Za-z_]+)\}/", function($m){
global ${$m[1]};
return ${$m[1]};
});
我正在使用 preg_replace()
将 {#page}
替换为变量 $page
的实际值。当然我有很多{#variable}
,不只是{#page}
.
例如:
$uri = "module/page/{#page}";
$page = 3;
//preg_replace that its working now
$uri_to_call = $uri_rule = preg_replace('/\{\#([A-Za-z_]+)\}/e', "$", $uri);
我得到了结果
"module/page/3";
更新到 PHP 5.4 后出现错误:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
而且我不知道如何用 preg_replace_callback()
重写 preg_replace()
。
我试着按照 SO Replace preg_replace() e modifier with preg_replace_callback
的回答像这样:
public static function replace_vars($uri) { //$uri_rule = preg_replace('/\{\#([A-Za-z_]+)\}/e', "$", $uri);
return preg_replace_callback('/{\#([A-Za-z_]+)\}/',
create_function ('$matches', 'return $$matches[1];'), $uri);
}
但我也收到警告:
Notice: Undefined variable: page
这实际上是正确的,因为它没有设置运行时创建函数的页面变量。
谁能帮帮我?
正如您所知,您的问题是您的变量超出了匿名函数的范围,并且由于您不知道要替换哪个变量,因此您无法将它们传递给函数,因此您必须使用 global
关键字,例如
$uri = "module/page/{#page}";
$page = 3;
$uri_to_call = $uri_rule = preg_replace_callback("/\{\#([A-Za-z_]+)\}/", function($m){
global ${$m[1]};
return ${$m[1]};
});