2017-10-27 18 views
0

どのようにして、外側のスコープに読めるuse()を経由して、コールバックでdyanmic(すなわち${...})変数を作成しますか?PHP - 使用中のダイナミックVAR()

これは解析エラーをスローすることに驚きました。

$foo = [1,2,3]; 
array_walk($foo, function($val, $key) use (&${'val_'.$key}) { //<-- parse error in use() 
    ${'val_'.$key} = $val; 
}); 
$val_2; //I expected 3; 

しかし、以下ではない - との唯一の違いは、私はuse()に、という名前の変数($bar)ではなく、動的なものを使用しています。

$foo = [1,2,3]; 
$bar = []; 
array_walk($foo, function($val, $key) use (&$bar) { //<-- fine - using 'normal' variable 
    $bar[$key] = $val; 
}); 
$bar[2]; //3 

これは仮説的な質問です。なぜ私は動的アプローチのエラーが不思議です。

+2

(https://bugs.php.net/bug.php?id=62918)[ありバグレポートはこちらです]が、それは情報興味深い – iainn

+0

の全体の多くを持っていません。バグページのコメント: "これは明らかな構文エラーです。PHPはスクリプトコンテキストで$ {'x'}をサポートしていません。$ {var}表記は、テキストと変数を区別するテキストコンテキストでのみ使用されます。 *明らかに*、ええ?それほど明白ではない、私は言うだろう。 – Utkanos

+1

ええ、それは私にも意味がありませんでした。それは完全に有効であるように思えます。どのような手段でも共通のユースケースではないので、私はそれが再び起こっていないことにショックを受けていません。 – iainn

答えて

-1

これはPHPチームのコメントによるバグではありません。

[2013年6月29日20時15分UTC] [email protected]

-Status: Open 

+Status: Not a bug

[2013年6月29日20時15分UTC] yohgaki @ php.net

$printGlob2 = function() use (${'x'}) { 

これは明らかな構文エラーです。 PHPは という文脈では${'x'}をサポートしていません。

${var}表記は、テキストを区別するためのテキストコンテキストと、 変数を区別するためにのみ使用されます。

Reference in comments section

+0

'PHPはスクリプトコンテキストで$ {'x'}をサポートしていません。 – iainn

+0

これはPHPの公式なコメントです... –

+0

ええ、私は、私はコメントに同じリンクを掲載したことを実現します。しかし、それは真実ではありません。 – iainn

関連する問題