这个失败:

 define('DEFAULT_ROLES', array('guy', 'development team'));

显然,常量不能保存数组。解决这个问题的最好方法是什么?

define('DEFAULT_ROLES', 'guy|development team');

//...

$default = explode('|', DEFAULT_ROLES);

这似乎是不必要的努力。


当前回答

PHP 5.6+引入了const数组——参见Andrea Faulds的回答。

你也可以序列化你的数组,然后把它放入常量:

# define constant, serialize array
define ("FRUITS", serialize (array ("apple", "cherry", "banana")));

# use it
$my_fruits = unserialize (FRUITS);

其他回答

从PHP 5.6开始,你可以用const声明一个数组常量:

<?php
const DEFAULT_ROLES = array('guy', 'development team');

短语法也可以,正如你所期望的那样:

<?php
const DEFAULT_ROLES = ['guy', 'development team'];

如果你有PHP 7,你最终可以使用define(),就像你第一次尝试的那样:

<?php
define('DEFAULT_ROLES', array('guy', 'development team'));

常量只能包含标量值,我建议您存储数组的序列化(或JSON编码表示)。

如果你使用的是php7 & 7+,你也可以像这样使用fetch

define('TEAM', ['guy', 'development team']);
echo TEAM[0]; 
// output from system will be "guy"

你可以将它们存储为类的静态变量:

class Constants {
    public static $array = array('guy', 'development team');
}
# Warning: array can be changed lateron, so this is not a real constant value:
Constants::$array[] = 'newValue';

如果你不喜欢数组可以被其他人更改的想法,getter可能会有所帮助:

class Constants {
    private static $array = array('guy', 'development team');
    public static function getArray() {
        return self::$array;
    }
}
$constantArray = Constants::getArray();

EDIT

从PHP5.4开始,甚至可以在不需要中间变量的情况下访问数组值,即以下工作:

$x = Constants::getArray()['index'];

PHP 7 +。

从PHP 7开始,你可以使用define()函数定义一个常量数组:

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

echo ANIMALS[1]; // outputs "cat"