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.
Respuestas:
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:
fuente
$fruit = FRUITS[0];
Desde PHP 5.6, puede declarar una matriz constante con
const
:La sintaxis corta también funciona, como era de esperar:
Si tiene PHP 7, finalmente puede usar
define()
, tal como lo había intentado por primera vez:fuente
define()
aquí en PHP 5.6, pero esto se ha solucionado para PHP 7.0 . :)Puede almacenarlos como variables estáticas de una clase:
Si no le gusta la idea de que otros puedan cambiar la matriz, un getter podría ayudarlo:
EDITAR
Desde PHP5.4, incluso es posible acceder a valores de matriz sin la necesidad de variables intermedias, es decir, los siguientes trabajos:
fuente
const AtomicValue =42; public static $fooArray = ('how','di')
Lo estoy usando así. Espero que ayude a otros.
config.php
En el archivo, donde necesito constantes.
fuente
Esto es lo que yo uso. Es similar al ejemplo proporcionado por soulmerge, pero de esta manera puede obtener la matriz completa o solo un valor único en la matriz.
Úselo así:
fuente
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.
fuente
A partir de PHP 5.6, puede definir matrices constantes utilizando la
const
palabra clave como a continuacióny se puede acceder a diferentes elementos de la siguiente manera:
Comenzando con PHP 7, las matrices constantes se pueden definir de la
define
siguiente manera:y se puede acceder a diferentes elementos de la misma manera que antes.
fuente
Sé que es una pregunta un poco vieja, pero aquí está mi solución:
Lo definí porque necesitaba almacenar objetos y matrices en constantes, así que también instalé runkit en php para poder hacer que la variable $ const sea superglobal.
Puedes usarlo como
$const->define("my_constant",array("my","values"));
o solo$const->my_constant = array("my","values");
Para obtener el valor simplemente llame
$const->my_constant;
fuente
__get
y__set
... debo decir que este método es genial.PHP 7+
A partir de PHP 7, puede usar el define () para definir una matriz constante:
fuente
Incluso puede trabajar con matrices asociativas ... por ejemplo en una clase.
fuente
Usando la función de explosión e implosión podemos improvisar una solución:
Esto hará eco
email
.Si desea optimizarlo más, puede definir 2 funciones para hacer las cosas repetitivas por usted de esta manera:
Espero que ayude . Feliz codificación
fuente
Hacer algún tipo de truco de ser / deser o codificar / decodificar parece feo y requiere que recuerdes exactamente lo que hiciste cuando intentas usar la constante. Creo que la variable estática privada de clase con acceso es una solución decente, pero te haré una mejor. Solo tenga un método público de obtención estático que devuelva la definición de la matriz constante. Esto requiere un mínimo de código adicional y la definición de la matriz no puede modificarse accidentalmente.
Si realmente quiere que parezca una constante definida, puede darle un nombre en mayúsculas, pero sería confuso recordar agregar los paréntesis '()' después del nombre.
Supongo que podría hacer que el método sea global para estar más cerca de la funcionalidad de define () que estaba solicitando, pero de todos modos debería determinar el nombre constante y evitar los globales.
fuente
Puedes definir así
fuente
Sí, puede definir una matriz como constante. Desde PHP 5.6 en adelante , es posible definir una constante como una expresión escalar, y también es posible definir una constante de matriz . Es posible definir constantes como un recurso, pero debe evitarse, ya que puede causar resultados inesperados.
Con la referencia de este enlace
Que tengan una feliz codificación.
fuente
Si está buscando esto desde 2009, y no le gusta AbstractSingletonFactoryGenerators, aquí hay algunas otras opciones.
Recuerde, las matrices se "copian" cuando se asignan, o en este caso, se devuelven, por lo que prácticamente obtiene la misma matriz cada vez. (Consulte el comportamiento de copia en escritura de las matrices en PHP).
fuente
si está usando PHP 7 y 7+, también puede usar fetch como este
fuente
Las constantes solo pueden contener valores escalares, le sugiero que almacene la serialización (o representación codificada en JSON) de la matriz.
fuente