PHP - 常量数组

时间:2013-03-07 18:28:52

标签: php

我有一个小的PHP脚本,使用全局变量是有意义的。其中一个全局变量是一个数组,它只包含要解压缩但未被多个不同函数修改的值。如果脚本有所扩展,那么拥有全局数组的想法有点令人不安。有没有办法将全局数组转换为常量,不可修改的值?如果是这样,我仍然可以使用implode()函数吗?

4 个答案:

答案 0 :(得分: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时,序列化数组,取消序列化字符串或爆炸字符串都是非常不必要的操作。如果需要在脚本中引用三个不同作用域中的单个值,则必须单独取消序列化或分解三次。这会占用更多内存,最重要的是处理时间。

答案 1 :(得分:0)

我害怕明确地说“不,你不能”,但我很确定是这样的。你可以做的是创建一个静态函数,它总是返回相同的值数组。这会解决你的问题吗?

答案 2 :(得分:0)

您可以序列化数组并在脚本中定义常量;

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

任何函数现在都可以对常量进行反序列化并获取原始数组,因为它知道它尚未被修改。

答案 3 :(得分: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;
}
?>