2017-10-10 26 views
0

我試圖找到解決方案,因爲很多小時,但我無法解決它(我不是一個程序員;))。如何在PHP中調用全局動態變量

在函數上,我設置了一個動態數組,我想在另一個函數中使用。 要做到這一點,我想使用$ GLOBALS []數組 我沒有問題從函數調用變量之一,但是當我嘗試在函數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

親愛的Chandlerbing, 謝謝你的回答,但我沒有足夠的技能來理解它。 我澄清了我的問題,希望對你更清楚。謝謝 – Etienne