这个失败:

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

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

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

//...

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

这似乎是不必要的努力。


当前回答

从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'));

其他回答

这就是我用的。它类似于soulmerge提供的示例,但是通过这种方式,您可以获得整个数组或数组中的单个值。

class Constants {
    private static $array = array(0 => 'apple', 1 => 'orange');

    public static function getArray($index = false) {
        return $index !== false ? self::$array[$index] : self::$array;
    }
}

像这样使用它:

Constants::getArray(); // Full array
// OR 
Constants::getArray(1); // Value of 1 which is 'orange'

如果您是从2009年开始看这个,并且不喜欢AbstractSingletonFactoryGenerators,那么这里有一些其他选项。

记住,数组在赋值时被“复制”,或者在本例中被返回,因此实际上每次都得到相同的数组。(参见PHP中数组的写时复制行为。)

function FRUITS_ARRAY(){
  return array('chicken', 'mushroom', 'dirt');
}

function FRUITS_ARRAY(){
  static $array = array('chicken', 'mushroom', 'dirt');
  return $array;
}

function WHAT_ANIMAL( $key ){
  static $array = (
    'Merrick' => 'Elephant',
    'Sprague' => 'Skeleton',
    'Shaun'   => 'Sheep',
  );
  return $array[ $key ];
}

function ANIMAL( $key = null ){
  static $array = (
    'Merrick' => 'Elephant',
    'Sprague' => 'Skeleton',
    'Shaun'   => 'Sheep',
  );
  return $key !== null ? $array[ $key ] : $array;
}

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

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

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

你可以这样定义

define('GENERIC_DOMAIN',json_encode(array(
    'gmail.com','gmail.co.in','yahoo.com'
)));

$domains = json_decode(GENERIC_DOMAIN);
var_dump($domains);