可以吗?
function my_function(&$array){
// processing $array here
extract($array); // create variables but not here
}
function B(){
$some_array = array('var1' => 23423, 'var2' => 'foo');
my_function($some_array);
// here I want to have $var, $var2 (what extract produced in my function)
}
例如,parse_str()能够做到这一点。
答案 0 :(得分:2)
编辑我没想到我的第一个答案。
答案是否定的;你可以在你的函数extract
中移动B
调用,这就是它。
顺便说一句,如果您有更多问题的背景,我可以改进我的答案:)
答案 1 :(得分:1)
这样可行,但它不会提取到它所调用的上下文中,只是全局...
function my_function($array){
foreach($array as $key => $value) {
global $$key;
$$key = $value;
}
}
但是,我不推荐它。很少(但并非完全不是)将一堆东西解包到全球范围内是一个好主意。
至于调用函数的范围,我认为这不可能,或者至少值得做。
答案 2 :(得分:1)
如果你想制作一个单行,我想你需要返回一个值。
function my_function($array){
// processing $array here
// Return the processed array
return $array;
}
function B(){
$some_array = array('var1' => 23423, 'var2' => 'foo');
// If you don't pass by reference, this works
extract(my_function($some_array));
}
PHP不允许你使用另一个函数的范围,这是一件好事。如果你在一个instanciated对象,你可以使用$this->
来处理一个属性,但我想你已经知道了。