2012-10-02 54 views
0

我需要一個全局數組在php中。PHP和全局陣列

這裏是例如:

global $array; 

$array[0] = test; 

如果(東西) 函數f1() 別的 函數f2();

function f1() 
{ 
    $array[0] = $array[0]." and test1"; 
} 

function f2() 
{ 
    $array[0] = $array[0]." and test2"; 
} 

但問題是,該數組不受全局影響,但作爲本地。

你知道爲什麼嗎?

謝謝。

+0

出了什麼問題,宣佈'F1()''作爲函數f1($陣列){...}'? –

+0

@Jack,沒什麼,我應該可以這樣做。 –

回答

3

你必須在每個函數內部調用全局函數,這樣PHP纔會知道在本地作用域之外。

function f1() 
{ 
    global $array; 
    $array[0] = $array[0]." and test1"; 
} 

function f2() 
{ 
    global $array; 
    $array[0] = $array[0]." and test2"; 
} 

注意在「現實世界」你應該忌用全局儘可能爲全局通常可以用重構解決或重新設計。全球趨向於導致一大塊泥土。

你應該考慮參考

function f3(&$array) 
{ 
    $array[0] = $array[0]." and test3"; 
} 

$array = array(); 
$array[0] = "test"; 

f3($array); 
var_dump($array); 

傳給你可以看到一個例如http://codepad.org/27R5ZuKM

+0

謝謝@Pez Cuckow,我應該也許應該避免使用globals並使用本地數組。 –

+0

嗯,但stil,當我嘗試使用全局像這樣,我不影響函數中的全局變量,只有本地的。 –

+0

這兩個選項都會修改全局變量,請重試! –

1

您需要在本地範圍內(即在函數中)將該數組聲明爲全局數組。

$array[0] = test; 

if(something)function f1()else function f2();

function f1() 
{ 
    global $array; 
    $array[0] = $array[0]." and test1"; 
} 

function f2() 
{ 
    global $array; 
    $array[0] = $array[0]." and test2"; 
} 
+0

欣賞它是很難做不同的,但這看起來非常從我的答案(檢查編輯日誌,這是我張貼我的後) –

+0

是的,這是...我已經編輯,當我得到'1新答案'和我沒有檢查!我的壞,應該有。 – geekman

+0

正如你將會看到它被複制粘貼從問題,然後編輯。 – geekman

2

如何將參數傳遞給函數,返回結果?

避免一個全球大面條

function f1($array) 
{ 
    $array[0] = $array[0]." and test1"; 
    return $array; 
} 

function f2($array) 
{ 
    $array[0] = $array[0]." and test2"; 
    return $array; 
} 
+0

對我來說,問題是我必須在函數f1和f2中返回布爾值。 –

+0

@Milos這個功能對我來說聽起來有點臭。它修改一個數組,然後做一些比較,它必須返回一個布爾值?看起來比較或驗證應該是一個單獨的函數..因爲函數通常應該只有一個工作。 – Anther

+0

如果您的代碼必須對數據圖進行操作,請將其設置爲一個類! – JvdBerg