我需要将$ route传递给它的内部函数,但是失败了:
function compilePath( $route )
{
preg_replace( '$:([a-z]+)$i', 'pathOption' , $route['path'] );
function pathOption($matches)
{
global $route;//fail to get the $route
}
}
我正在使用php5.3,是否有一些功能可以提供帮助?
答案 0 :(得分:5)
我不认为你可以在PHP 5.2中做任何类似的事情,但不幸的是 - 当你使用PHP 5.3时......你可以使用Closures来实现它。
首先,这是一个使用Closure的快速示例:
function foo()
{
$l = "xyz";
$bar = function () use ($l)
{
var_dump($l);
};
$bar();
}
foo();
将显示:
string 'xyz' (length=3)
请注意use
关键字; - )
以下是您在特定情况下如何使用它的示例:
function compilePath( $route )
{
preg_replace_callback( '$:([a-z]+)$i', function ($matches) use ($route) {
var_dump($matches, $route);
} , $route['path'] );
}
$data = array('path' => 'test:blah');
compilePath($data);
你得到这个输出:
array
0 => string ':blah' (length=5)
1 => string 'blah' (length=4)
array
'path' => string 'test:blah' (length=9)
几点说明:
preg_replace_callback
,而不是preg_replace
- 因为我想要调用一些回调函数。$route
关键字导入use
。
preg_replace_callback
传递给回调函数,以及$route
。答案 1 :(得分:1)
将所有内容放入一个类中,包括回调并使用$ this-> route而不是使用全局变量来获取$ route。你应该使用preg_replace_callback()。要使用类的回调,请使用Array($ class,'callback')或Array('className','callback)。