2

我有一个小的 PHP 脚本,在其中使用全局变量是有意义的。其中一个全局变量是一个数组,它只包含要解包但不被几个不同函数修改的值。如果脚本扩展,拥有一个全局数组的想法有点令人不安。有没有办法将一个全局数组变成一个不变的、不可修改的值?如果是这样,我仍然可以使用它的implode()功能吗?

4

4 回答 4

3

PHP 常量不支持高级数据结构,因此无法将数组存储为常量的值。除非你按照你提到的那样做,通过爆炸字符串。

有几个全局变量(称为超全局变量)可在所有 PHP 范围内使用:

  • $_GET
  • $_POST
  • $_REQUEST
  • $_SERVER
  • $全球

我强烈建议使用$GLOBALS, 并将您的数组放在该数组中。它将立即在任何函数、类或包含文件中可用。

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

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

print my_func(); // prints: val1

虽然您可以序列化常量的值或在您想从中获取值时对其进行分解,但请记住,转换操作确实需要时间。当您可以简单地将值附加到$GLOBALS. 如果您需要在脚本中引用来自三个不同范围的单个值,您将被迫取消序列化或分解三个不同的时间。这会占用更多内存,最重要的是,会占用处理时间。

于 2013-03-07T18:39:40.417 回答
0

我害怕明确地说“不,你不能”,但我很确定情况就是这样。您可以做的是在某处创建一个静态函数,该函数将始终返回相同的值数组。那能解决你的问题吗?

于 2013-03-07T18:32:12.110 回答
0

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

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

任何函数现在都可以反序列化常量并获取原始数组,知道它没有被修改。

于 2013-03-07T18:39:21.223 回答
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;
}
?>
于 2013-08-12T10:25:11.217 回答