Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP回调动态变量范围访问_Php_Callback_Scope_Closures - Fatal编程技术网

PHP回调动态变量范围访问

PHP回调动态变量范围访问,php,callback,scope,closures,Php,Callback,Scope,Closures,在PHP中,您可以动态创建变量 $myarr = array('name'=>'Adam', 'age'=>22, 'sex'=>'male'); foreach ($myarr as $k=>$v) $$k = $v; 是否有方法将回调函数X和arrayX传递给另一个函数Y,从函数Y中的arrayX动态创建变量,并能够在函数X回调中引用这些变量 例如,我想: function eachRecord($arr, $callback){ foreach (

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

$myarr = array('name'=>'Adam', 'age'=>22, 'sex'=>'male');
foreach ($myarr as $k=>$v)
    $$k = $v;
是否有方法将回调函数X和arrayX传递给另一个函数Y,从函数Y中的arrayX动态创建变量,并能够在函数X回调中引用这些变量

例如,我想:

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}.";
});
我不想将变量传递回回调函数,因为我可能不知道数组中的长度或键,我不想用未知的变量名污染全局范围,因为它们是动态创建的

有没有办法做到这一点?闭包


谢谢

不,不可能。但像这样工作并不难:

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

callback($myArr);

无论如何,你基本上只是在重新创造。

天哪。。。我在空闲时间用PHP工作了多年,仍然不断地寻找我从未接触过的函数……我用了4年的PHP,几周前刚刚发现了提取函数,所以你并不孤单:)如果有块作用域,我也会很高兴,这样我就可以内联地完成这项工作,而不必将其封装在函数中。否则,这些变量在for/foreach循环之外可用。