
Nick Heiner
Esto falló:
define('DEFAULT_ROLES', array('guy', 'development team'));
Aparentemente, las constantes no pueden contener matrices. ¿Cuál es la mejor manera de evitar esto?
define('DEFAULT_ROLES', 'guy|development team');
//...
$default = explode('|', DEFAULT_ROLES);
Esto parece un esfuerzo innecesario.

Andrea
Desde PHP 5.6, puede declarar una matriz constante con const
:
<?php
const DEFAULT_ROLES = array('guy', 'development team');
La sintaxis corta también funciona, como era de esperar:
<?php
const DEFAULT_ROLES = ['guy', 'development team'];
Si tiene PHP 7, finalmente puede usar define()
tal como lo había intentado por primera vez:
<?php
define('DEFAULT_ROLES', array('guy', 'development team'));
NOTA: si bien esta es la respuesta aceptada, vale la pena señalar que en PHP 5.6+ puede tener matrices constantes; consulte la respuesta de Andrea Faulds a continuación.
También puede serializar su matriz y luego ponerla en la constante:
# define constant, serialize array
define ("FRUITS", serialize (array ("apple", "cherry", "banana")));
# use it
$my_fruits = unserialize (FRUITS);

fusión del alma
Puede almacenarlos como variables estáticas de una clase:
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';
Si no le gusta la idea de que otros puedan cambiar la matriz, un getter podría ayudar:
class Constants {
private static $array = array('guy', 'development team');
public static function getArray() {
return self::$array;
}
}
$constantArray = Constants::getArray();
EDITAR
Desde PHP5.4, incluso es posible acceder a valores de matriz sin necesidad de variables intermedias, es decir, funciona lo siguiente:
$x = Constants::getArray()['index'];

ciclón
Esto es lo que uso. Es similar al ejemplo proporcionado por soulmerge, pero de esta manera puede obtener la matriz completa o solo un valor en la matriz.
class Constants {
private static $array = array(0 => 'apple', 1 => 'orange');
public static function getArray($index = false) {
return $index !== false ? self::$array[$index] : self::$array;
}
}
Úsalo así:
Constants::getArray(); // Full array
// OR
Constants::getArray(1); // Value of 1 which is 'orange'
Puede almacenarlo como una cadena JSON en una constante. Y desde el punto de vista de la aplicación, JSON puede ser útil en otros casos.
define ("FRUITS", json_encode(array ("apple", "cherry", "banana")));
$fruits = json_decode (FRUITS);
var_dump($fruits);
A partir de PHP 5.6, puede definir matrices constantes usando const
palabra clave como a continuación
const DEFAULT_ROLES = ['test', 'development', 'team'];
y se puede acceder a diferentes elementos de la siguiente manera:
echo DEFAULT_ROLES[1];
....
A partir de PHP 7, las matrices constantes se pueden definir usando define
como a continuación:
define('DEFAULT_ROLES', [
'test',
'development',
'team'
]);
y se puede acceder a diferentes elementos de la misma manera que antes.

Rabin Lama Dong
PHP 7+
A partir de PHP 7, solo puede usar el definir() función para definir una matriz constante:
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
echo ANIMALS[1]; // outputs "cat"
PHP 5.6 admite matrices constantes, vea mi respuesta a continuación.
– Andrea
11 de diciembre de 2014 a las 0:14
¿Cuándo necesitaría usar una matriz como constante? ¿Está tratando de hacer una enumeración? Si es así, utilice SplEnum: php.net/manual/en/class.splenum.php
– ziGi
11 de diciembre de 2014 a las 0:22
@ziGi Encontró este problema hoy, tiene diferentes tipos de imágenes para almacenar que requieren dimensiones específicas, se volvió útil almacenar estas dimensiones como matrices constantes en lugar de una para el ancho y otra para la altura.
– Matt K.
11/09/2015 a las 21:09