2011-08-27 26 views
1

在PHP中,你可以創建動態變量PHP回調動態變量的作用域訪問

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

是有辦法回調functionX和arrayX傳遞給另一個函數y,動態的函數y創建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}."; 
}); 

我不希望有傳遞變量回到回調函數,因爲我可能不知道在陣列內的長度或鍵,和我不想污染具有未知變量名稱的全局範圍,因爲它們是動態創建的。

有沒有辦法做到這一點?關閉?

謝謝

回答

0

不,這是不可能的。不難解決這樣雖然:

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

callback($myArr); 

你基本上只有重塑http://php.net/extract反正。

+1

作者golly ...我在空閒時間使用了PHP多年,仍然不斷地找到我從未接觸過的函數...... – quietchaos

+0

我做了4年的php,並且剛剛發現了提取函數a幾周後也是如此,所以你並不孤單:) –

+0

它也將是很好的有塊範圍,所以我可以做到這一點,而不必包裝它在一個函數。否則,這些變量在for/foreach循環之外是可用的。 – quietchaos