2013-03-07 42 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; 
} 
?>