2012-11-09 180 views
10

我在PHP中創建了一個基本框架。我需要將當前頁面的數據傳遞給不同的功能,允許他們修改並保存它,然後將其傳回到要顯示的頁面。我原本打算將數據存儲在像$GLOBALS['data']這樣的全局變量中,但我開始認爲使用全局變量是一個壞主意。所以我在想,相反,我會在系統類中放入一個靜態變量,並使用system::$data來訪問它。所以,我的問題是,哪個更好,爲什麼?PHP中的全局與靜態變量

此:

$GLOBALS['data'] = array(); 
$GLOBALS['data']['page_title'] = 'Home'; 
echo $GLOBALS['data']['page_title']; 

或者這樣:

class system 
{ 
    public static $data = array() 
} 

function data($new_var) 
{ 
    system::$data = array_merge(system::$data, $new_var); 
} 

data(array('page_title' => 'Home')); 
echo system::$data['page_title']; 

回答

11

真的是一個全局變量和一個public static變量之間沒有什麼區別。類變量命名空間好一點點,但這幾乎沒有什麼區別。兩者都可以隨時隨地訪問,並且都是全球性的。

碰巧,我只寫了關於這個問題的詳盡的文章:
How Not To Kill Your Testability Using Statics

+4

真棒文章 –

+0

是否有性能差異?看起來全局變量不如使用靜態變量那樣高效。 –

+2

@凱爾**沒關係**認真。可能存在差異,但它的天文數字太小而無關緊要。您的首要任務應該是編寫可維護,合乎邏輯,可讀性強的代碼,以及所有其他應用程序代碼。爲了這個目的,全局變量和「公共靜態」變量都是可怕的。 – deceze

1

所以,我的問題是,這將是更好的,爲什麼?

你已經意識到有一些問題把這一切全部變爲全局。儘管你已經有了一些想法來將事物封裝到一個類中。

我認爲這是一個很好的起點。讓我們添加一些香料烹調得到這個更流暢的開頭:

$data = new ArrayObject(array()); 
$data['page_title'] = 'Home'; 

您已經創建了一個對象,現在你可以沿着包含您的數據傳遞。只需通過$data到需要的地方。不需要全局或全局靜態變量。

你甚至可以通過自己的類型從ArrayObject擴展到更具體的類型。

+0

作爲參考,與本文完全無關,我們無法再遷移60天以上的問題。 – NullUserException

+0

@NullUserException:感謝您的通知。 – hakre