是否有可能声明一个数组作为常量

我们可以定义一个常数

define("aconstant','avalue'); 

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

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

更新:这是可能的PHP 7( 参考 )

 // Works as of PHP 7 define('ANIMALS', array( 'dog', 'cat', 'bird' )); echo ANIMALS[1]; // outputs "cat" 

原来的答案

从php.net …

常数的值; 只有标量和空值是允许的 。 标量值是整数,浮点数,string或布尔值。 可以定义资源常量,但不推荐使用,并可能导致不可预知的行为。

$months = array("January,"February",...)将会很好。

你可以使用const从PHP 5.6(通过nikic )。

 const months = ["January", "February"]; var_dump("January" === months[0]); 

你可以把数组放在常量中,

 define('MONTHS', serialize(array('January', 'February' ...))); 

但是,那么你必须在需要的时候反unserialize()这个常量值,我想这不是那么有用。

作为替代,定义多个常量:

 define('MONTH_1', 'January'); define('MONTH_2', 'February'); ... 

并使用constant()函数来查找值:

 echo constant('MONTH_'.$month); 

不,你不能。 请参阅PHP:语法 – 手册

标量数据布尔值,整数,浮点数string )可以包含在常量中。 可以将常量定义为资源,但应该避免,因为这可能会导致意外的结果。

您可以使用JSON格式将数组保存为string,然后将此string分配给常量。

 $months = array("January","February","March"); define('MONTHS', json_encode($months)); 

当你想使用它:

 $months = json_decode(MONTHS); 

如果你必须有一个常量,那么如何使用分隔string并爆炸成一个数组?

 define("MONTHS", "January;February;March"); $months = explode(";",MONTHS); 

从PHP 5.6开始,可以声明常量数组 。 链接的文档使用示例const ARR = ['a', 'b']; 。 你也可以做const ARR = array('a', 'b'); 。 然而,在5.6中有一个奇怪的怪癖:你可以使用const声明常量数组,而不是define() 。 这已在PHP 7.0中得到纠正 。