PHP回调动态变量范围访问

时间:2011-08-27 03:27:06

标签: php callback scope closures

在PHP中,您可以动态创建变量

$myarr = array('name'=>'Adam', 'age'=>22, 'sex'=>'male');
foreach ($myarr as $k=>$v)
    $$k = $v;

有没有办法将回调函数X和arrayX传递给另一个函数Y,在functionY中从arrayX动态创建变量,并且能够在functionX回调中引用这些变量?

例如,我想:

function eachRecord($arr, $callback){
    foreach ($arr as $k=>$v) $$k = $v;
    $callback();
}
$myarr = array('name'=>'Adam', 'age'=>22, 'sex'=>'male');
eachRecord($myarr, function(){
   echo "{$name} is a {$sex} of age {$age}.";
});

我不想将变量传回回调函数,因为我可能不知道数组中的长度或键,并且我不想用未知的变量名来污染全局范围,因为它们是动态创建。

有没有办法做到这一点?封?

感谢

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。不过这样解决并不难:

function callback($values) {
   extract($values);
   echo "{$name} is a {$sex} of age {$age}.";
}

callback($myArr);

无论如何,你基本上只是在重新发明http://php.net/extract