3

可以做到吗?

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

4

3 回答 3

2

编辑在我的第一个答案中没有考虑。

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

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

于 2012-05-18T16:15:45.787 回答
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 不允许您使用另一个函数的作用域,这是一件好事。如果你在一个实例化的对象中,你可以$this->用来处理一个属性,但我想你已经知道了。

于 2012-05-18T16:30:04.047 回答
1

这有效,但它不会提取到它被调用的上下文中,只是全局...

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

键盘

但是,我不会推荐它。将一堆东西解压到全局范围内很少(但也不是完全没有)是个好主意。

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

于 2012-05-18T16:16:24.273 回答