【问题标题】:PHP callback dynamic variable scope accessPHP回调动态变量范围访问
【发布时间】:2011-11-04 22:57:49
【问题描述】:

在 PHP 中可以动态创建变量

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

有没有办法将回调functionX和arrayX传递给另一个functionY,从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}.";
});

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

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

谢谢

【问题讨论】:

    标签: php callback scope closures


    【解决方案1】:

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

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

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

    【讨论】:

    • by golly...我多年来一直在空闲时间使用 PHP,并且仍然不断地找到我从未接触过的功能...
    • 我做了 4 年的 php,几周前也发现了提取功能,所以你并不孤单 :)
    • 拥有块范围也很好,所以我可以内联执行此操作,而不必将其包装在函数中。否则,这些变量在 for/foreach 循环之外可用。
    猜你喜欢
    • 2013-06-12
    • 2012-07-16
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    相关资源
    最近更新 更多