是否有可能声明一个数组作为常量
我们可以定义一个常数
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中得到纠正 。