我们可以定义一个像
这样的常量define("aconstant','avalue');
我们不能像下面这样定义数组吗?
define("months",array("January", "February", ---);
答案 0 :(得分:78)
您可以使用 const ,因为PHP 5.6(通过nikic)。
const months = ["January", "February"];
var_dump("January" === months[0]);
答案 1 :(得分:59)
更新:这可以在PHP 7中使用(reference)
// Works as of PHP 7
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo ANIMALS[1]; // outputs "cat"
原始回答
来自php.net ...
常数的值;只有标量和空值 允许即可。标量值是整数,浮点数,字符串或布尔值。 可以定义资源常量,但事实并非如此 建议并可能导致不可预测的行为。
$months = array("January,"February",...)
会很好。
答案 2 :(得分:29)
您可以使用hack将数组放在常量中:
define('MONTHS', serialize(array('January', 'February' ...)));
但是在必要时你必须unserialize()
这个常数值,我想这不是那么有用。
作为替代方案,定义多个常量:
define('MONTH_1', 'January');
define('MONTH_2', 'February');
...
使用constant()
函数查找值:
echo constant('MONTH_'.$month);
答案 3 :(得分:11)
只有标量数据( boolean,integer,float 和 string )才能包含在常量中。 可以将常量定义为资源,但应该避免, 因为它可能会导致意想不到的结果。
答案 4 :(得分:9)
您可以使用JSON格式将数组保存在字符串中,然后将此字符串指定为常量。
$months = array("January","February","March");
define('MONTHS', json_encode($months));
当您想要使用它时:
$months = json_decode(MONTHS);
答案 5 :(得分:6)
如果你必须有一个常量,那么如何使用一个分隔的字符串并爆炸成一个数组呢?
define("MONTHS", "January;February;March");
$months = explode(";",MONTHS);
答案 6 :(得分:6)
从PHP 5.6开始,可能to declare constant arrays。链接的文档使用示例const ARR = ['a', 'b'];
。你也可以做const ARR = array('a', 'b');
。但是,在5.6中有一个奇怪的怪癖:您可以使用const
声明常量数组,但不能define()
。 PHP 7.0中的这个has been corrected。