我有一个小的PHP脚本,其中使用全局变量是有意义的。其中一个全局变量是一个数组,它只包含要解包的值,但不会被几个不同的函数修改。如果脚本扩展了,那么拥有全局数组的想法就有点令人不安了。有没有办法把一个全局数组变成一个常量的、不可修改的值?如果是这样的话,我是否仍然可以在它上面使用implode()函数?
发布于 2013-03-08 02:39:40
PHP常量不支持高级数据结构,因此无法将数组存储为常量的值。除非你按你说的做,通过引爆绳子。
有几个全局变量(称为超全局变量)可以在所有PHP作用域中使用:
我强烈建议使用$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-08 02:32:12
我不敢明确地说“不,你不能”,但我很确定情况就是这样。你能做的就是在某个地方创建一个总是返回相同数组的静态函数。这能解决你的问题吗?
发布于 2013-03-08 02:39:21
你可以序列化数组并在脚本中定义一个常量;
define("GLOBAL_DATA", "xxxxxxxx"); -- use the serialized array任何函数现在都可以反序列化常量并获得原始数组,因为知道它没有被修改。
https://stackoverflow.com/questions/15278961
复制相似问题