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){
  foreach($array as $key => $value) {
      global $$key;
      $$key = $value;
  }
}

CodePad

しかし、私はそれをお勧めしません。たくさんのものをグローバルスコープにアンパックすることはめったにありません(ただし、排他的ではありません)。

関数が呼び出されたスコープに抽出する限り、それは可能ではないか、少なくとも実行する価値はないと思います。

于 2012-05-18T16:16:24.273 に答える
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 に答える