是否可以使用变量名定义常量?

问题描述:

我想能够从数组中生成一些常量。所以像这样:是否可以使用变量名定义常量?

foreach ($array as $key => $value) { 
    define($key,$value); 
} 

有没有一种简单的方法来做到这一点?

+0

我看到没有必要使用这种类型的东西常量,为什么不只是使用变量? – David 2013-02-08 19:44:27

+2

你的代码工作正常http://codepad.viper-7.com/eeXE6J – 2013-02-08 19:48:03

+0

看看http://*.com/questions/12113663/dynamic-constants-in-php/12117642 – 2013-02-08 19:53:36

您已经在您的代码中执行此操作。或者你是这个意思?

$array = array("sparkles" => "pretty"); 

foreach($array as $key=>$value) { 
    ${$key} = $value; 
} 

echo $sparkles; //pretty 
+1

这些是变量,而不是常量 – 2013-02-08 19:46:58

+0

它按我写的方式工作。我之前没有必要这样做,并且在代码的另一部分中存在另一个错误,导致它无法正常工作。我觉得很愚蠢,假设它不能像我写的那样工作,但感谢所有的帮助。 – 2013-02-08 19:57:15

你也可以尝试使用extract函数。它产生相同的结果(几乎)在NJK的答案

参见:http://php.net/manual/en/function.extract.php

+0

哦,downvoting ...好吧,它不会创建任何常量。要在运行时创建常量,您可以尝试使用'eval'构造 - 但这不是一个好主意。你也可以看看我对类似问题的回答:http://*.com/questions/12113663/dynamic-constants-in-php/12117642#12117642 – 2013-02-08 19:52:19

+0

eval与创建常量有什么关系? – Supericy 2013-02-08 19:57:13

+0

请点击链接... – 2013-02-08 19:59:53

的选择,如果你有许多常量定义,并安装APC:

$constants = array(
    'ONE' => 1, 
    'TWO' => 2, 
    'THREE' => 3, 
); 
apc_define_constants('numbers', $constants); 

(直例子从apc_define_constants


编辑:an interesting read about performance

假设PHP 5.3或更高版本,你可以这样做:

array_walk($array, function ($value, $key) { 
    define($key, $value); 
}); 

array_walk(array_flip($array), 'define'); 

但说实话,我只想用当前的方法。