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