是否可以将数组声明为常量

时间:2010-09-27 11:28:19

标签: php

我们可以定义一个像

这样的常量
define("aconstant','avalue');

我们不能像下面这样定义数组吗?

define("months",array("January", "February", ---); 

7 个答案:

答案 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)

不,你不能。见PHP: Syntax - Manual

  

只有标量数据 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