在当前范围内设置我的函数集变量

时间:2012-05-18 16:10:47

标签: php variables

可以吗?

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()能够做到这一点。

3 个答案:

答案 0 :(得分:2)

编辑我没想到我的第一个答案。

答案是否定的;你可以在你的函数extract中移动B调用,这就是它。

顺便说一句,如果您有更多问题的背景,我可以改进我的答案:)

答案 1 :(得分:1)

这样可行,但它不会提取到它所调用的上下文中,只是全局...

function my_function($array){
  foreach($array as $key => $value) {
      global $$key;
      $$key = $value;
  }
}

CodePad

但是,我不推荐它。很少(但并非完全不是)将一堆东西解包到全球范围内是一个好主意。

至于调用函数的范围,我认为这不可能,或者至少值得做。

答案 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->来处理一个属性,但我想你已经知道了。