2013-03-07 41 views
2

我有一個小的PHP腳本,它使用全局變量是有意義的。其中一個全局變量是一個數組,它僅包含要解壓縮的值,但不能被幾個不同的函數修改。如果腳本不斷擴展,擁有全局數組的想法有點令人不安。有什麼辦法可以把全局數組變成一個常量,不可修改的值嗎?如果是這樣,我仍然可以使用它的implode()功能嗎?PHP - 常量數組

+0

你有GOOGLE上搜索 「PHP常量」,發現這個http://php.net/manual/en/language.constants.php? – Popnoodles 2013-03-07 18:31:45

+3

在PHP中使用ENUMS http://stackoverflow.com/questions/254514/php-and-enums – 2013-03-07 18:33:04

+0

@popnoodles事實上,我有。想知道是否有解決方法。 – user1427661 2013-03-07 18:33:34

回答

3

PHP常量不支持高級數據結構,因此不可能將數組存儲爲常量的值。除非你像你所說的那樣去做,否則會爆炸繩子。

有幾個全局變量(被稱爲超全局變量),其可以從所有PHP範圍:

  • $ _GET
  • $ _ POST
  • $ _REQUEST
  • $ _ SERVER
  • $ GLOBALS

我強烈建議使用$GLOBALS,並將您的數組放入該數組中。它將立即在任何功能,類別或包含文件中提供。

<?php 
$GLOBALS['my_arr'] = array('key1' => 'val1', 'key2' => 'val2'); 

function my_func() { 
    return $GLOBALS['my_arr']['key1']; 
} 

print my_func(); // prints: val1 

雖然你可以序列常量的值或爆炸它時,你想從中攫取價值,記住轉換操作也需要時間。序列化數組,序列化字符串或分解字符串都是非常不必要的操作,只需將值附加到$GLOBALS即可。如果您需要在腳本中引用來自三個不同範圍的單個值,那麼您不得不三次取消序列化或爆炸。這佔用了更多的內存,最重要的是處理時間。

0

我很害怕明確地說「不,你不能」,但我很確定是這樣。你可以做的是創建一個靜態函數,它將始終返回相同的值數組。這能解決你的問題嗎?

0

你可以序列化數組並在腳本中定義一個常量;

define("GLOBAL_DATA", "xxxxxxxx"); -- use the serialized array 

任何函數現在可以反序列化常量並獲取原始數組,知道它沒有被修改。

0

使用PHP的json_encode()函數將其轉換爲JSON,並使用json_decode()將其轉換回字符串。

例子:

<?php 
define('CONSTANT',json_encode(array('test'))); 
//Use the constant: 
if(in_array('CONSTANT',json_decode(constant('CONSTANT')))) { 
    return true; 
} else { 
    return false; 
} 
?>