首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -常量数组

问PHP -常量数组
EN

Stack Overflow用户
提问于 2013-03-08 02:28:52
回答 4查看 131关注 0票数 2

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-08 02:39:40

PHP常量不支持高级数据结构,因此无法将数组存储为常量的值。除非你按你说的做,通过引爆绳子。

有几个全局变量(称为超全局变量)可以在所有PHP作用域中使用:

  • $_GET
  • $_POST
  • $_REQUEST
  • $_SERVER
  • $GLOBALS

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

代码语言:javascript
复制
<?php
$GLOBALS['my_arr'] = array('key1' => 'val1', 'key2' => 'val2');

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

print my_func(); // prints: val1

虽然您可以序列化一个常量的值,或者在您想要从常量中获取一个值时对其进行分解,但请记住,转换操作确实需要时间。当您可以简单地向$GLOBALS追加一个值时,序列化数组、反序列化字符串或分解字符串都是非常不必要的操作。如果需要在脚本中引用来自三个不同作用域的单个值,则必须取消序列化或分解三次。这会占用更多内存,最重要的是占用处理时间。

票数 3
EN

Stack Overflow用户

发布于 2013-03-08 02:32:12

我不敢明确地说“不,你不能”,但我很确定情况就是这样。你能做的就是在某个地方创建一个总是返回相同数组的静态函数。这能解决你的问题吗?

票数 0
EN

Stack Overflow用户

发布于 2013-03-08 02:39:21

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

代码语言:javascript
复制
define("GLOBAL_DATA", "xxxxxxxx");   -- use the serialized array

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15278961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档