2017-10-10 15 views
0

私は何時間も解決策を見つけようとしていますが、解決できません(私はプログラマーではありません))。PHPでグローバル動的変数を呼び出す方法

関数上、別の関数で使用したい動的配列を設定しました。 $ GLOBALS [] array 変数を関数から呼び出すのに問題はありませんが、関数2で使用しようとすると問題はありません。ここで

は私のコードです:

function one($name,$a,$b,$c) 
{ 
// $GLOBALS[${$name}] = array($a,$b,$c); 
global $$name; 
$$name = array($a,$b,$c); 
} 



function two($name) 
{ 
$name="D1"; 
echo ${$name}[1]; 
} 

one("D1",10,20,30); 
one("D2",100,200,300); 
two("D1");  // doesn't works 


$name="D1"; 
echo ${$name}[1]; // works, gives 20 
$name="D2"; 
echo ${$name}[1]; // works, gives 200 

それは作品と私は理由を理解していないしません。 ご協力いただきありがとうございます。

エティエンヌ

+2

http://php.net/manual/en/language.variables.scope.php –

+2

[参考:変数スコープとは何か、どこから変数にアクセスできますか?未定義の変数ですか?] (https://stackoverflow.com/questions/16959576/reference-what-is-variable-scope-which-variables-are-accessible-from-where-and) – GrumpyCrouton

+0

'global $ name;'を使用すると簡単になる可能性があります – PaulH

答えて

1
<?php 

function one($name,$a,$b,$c) 
{ 
    global $$name; 
    $$name = array($a,$b,$c); 
} 

function two($name) 
{ 
    global $$name; 
    echo ${$name}[0]; 
} 

one("D1",10,20,30); 
two("D1"); 

機能のスコープはグローバルスコープとは異なります。

+0

ありがとうProgrock! – Etienne

+0

私はそれを知らなかった、私はグローバルスコープがすべての機能を含むすべての文書にあると思った!私は理解してもらいたい。別の関数で 'global'変数を使用するには、関数で 'global'を使用して変数を宣言する必要があります。私はちょうど再び、フランス語のPHPユーザーガイドを読んで、私はそれを書いたが、それは私には明らかではなかった;)非常にありがとう! – Etienne

2

どのようにこのような何かをやっについて:

function one() { 
    $dynamicArray = generateDynamicArray(); 
    return $dynamicArray; 
} 

function two() { 
    $one = one(); // if it's in a class use: $this->one(); 
    foreach($one in $key=>$value) { 
     // your code for each item in the array we got form function one() 
    } 
} 

の代わりに、グローバルに定義します。

+0

に送ってください。チャンドラーニング宛て ありがとうございますが、私はそれを理解するのに十分な熟練者ではありません。 私は私の質問を明確にしました。あなたにとってより明確になることを願っています。おかげで – Etienne

関連する問題