tec*_*ert 10 php arrays global constants
我想知道你认为什么是最好和最干净的方法来定义一个类似于定义函数工作方式的常量数组变量.我见过很多人在谷歌问这个问题,到目前为止我提出的最简单的解决方案是在define语句中使用PHP 序列化函数,就像这样
define ("MY_ARRAY", serialize (array ("key1" => $value1,"key2" => $value2, ..)));
Run Code Online (Sandbox Code Playgroud)
然后使用定义的常量你可以做这样的事情:
$MY_ARRAY = unserialize (MY_ARRAY)
print_r ($MY_ARRAY);
Run Code Online (Sandbox Code Playgroud)
如果您的代码中有很多定义,不确定序列化函数是否会降低您的速度.你怎么看?
序列化,特别是反序列化非常尴尬.(另一方面,为什么脚本语言不能将数组作为常量也不太清楚......)
但这实际上取决于使用模式.通常,您需要用于存储配置设置的全局定义.全局变量和常量是适当的用途(尽管"全局变量是邪恶的!1!"meme).但建议至少将所有内容都放入某种注册表对象或数组中:
class config {
var $MY_ARRAY = array("key1"=>...);
var $data_dir = "/tmp/";
}
Run Code Online (Sandbox Code Playgroud)
这提供了最简单的访问语法config::$MY_ARRAY.这不是一个常数,但你很容易伪造它.只需使用ArrayObject或ArrayAccess,并以一种使属性为只读的方式实现它.(使offsetSet抛出错误.)
如果你想要一个全局数组常量解决方法,那么另一种选择(我从定义手册页中窃取了这个想法)是使用函数来代替常量:
function MY_ARRAY() {
return array("key1" => $value1,);
}
Run Code Online (Sandbox Code Playgroud)
访问再次不是很稳定,但MY_ARRAY()足够短.虽然MY_ARRAY()["key1"]在PHP 5.3之前不可能使用良好的数组访问; 但同样这可能是伪造的MY_ARRAY("key1").
| 归档时间: |
|
| 查看次数: |
6679 次 |
| 最近记录: |