繁体   English   中英

在PHP中定义全局常量数组的最“优雅”方法是什么

[英]What is the most “elegant” way to define a global constant array in PHP

我想知道你认为什么是最好和最干净的方法来定义一个类似于定义函数工作方式的常量数组变量。 我见过很多人在谷歌问这个问题,到目前为止我提出的最简单的解决方案是在define语句中使用PHP 序列化函数,就像这样

define ("MY_ARRAY", serialize (array ("key1" => $value1,"key2" => $value2, ..)));

然后使用定义的常量你可以做这样的事情:

$MY_ARRAY = unserialize (MY_ARRAY)
print_r ($MY_ARRAY);

如果您的代码中有很多定义 ,不确定序列化函数是否会降低您的速度。 你怎么看?

$GLOBALS['MY_ARRAY'] = array();

序列化,特别是反序列化非常尴尬。 (另一方面,为什么脚本语言不能将数组作为常量也不太清楚......)

但这实际上取决于使用模式。 通常,您需要用于存储配置设置的全局定义。 全局变量和常量是适当的用途(尽管“全局变量是邪恶的!1!”meme)。 但建议至少将所有内容都放入某种注册表对象或数组中:

class config {
     var $MY_ARRAY = array("key1"=>...);
     var $data_dir = "/tmp/";
} 

这为config::$MY_ARRAY提供了最简单的访问语法。 这不是一个常数,但你很容易伪造它。 只需使用ArrayObject或ArrayAccess,并以一种使属性为只读的方式实现它。 (使offsetSet抛出错误。)

如果你想要一个全局数组常量解决方法,那么另一种选择(我从定义手册页中窃取了这个想法)是使用函数来代替常量:

function MY_ARRAY() {
     return array("key1" => $value1,);
}

访问再次不是很稳定,但MY_ARRAY()足够短。 虽然PHP 5.3之前不可能使用MY_ARRAY()["key1"]进行良好的数组访问; 但同样可以用MY_ARRAY("key1")伪造。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM