Isso falhou:
define('DEFAULT_ROLES', array('guy', 'development team'));
Aparentemente, as constantes não podem conter matrizes. Qual é a melhor maneira de contornar isso?
define('DEFAULT_ROLES', 'guy|development team');
//...
$default = explode('|', DEFAULT_ROLES);
Isso parece um esforço desnecessário.
Respostas:
NOTA: enquanto esta é a resposta aceita, vale a pena notar que no PHP 5.6+ você pode ter arrays const - veja a resposta de Andrea Faulds abaixo .
Você também pode serializar sua matriz e depois colocá-la na constante:
fonte
$fruit = FRUITS[0];
Desde o PHP 5.6, você pode declarar uma matriz constante com
const
:A sintaxe curta também funciona, como seria de esperar:
Se você possui o PHP 7, pode finalmente usar
define()
, exatamente como havia tentado:fonte
define()
aqui no PHP 5.6, mas isso foi corrigido no PHP 7.0 . :)Você pode armazená-los como variáveis estáticas de uma classe:
Se você não gosta da ideia de que a matriz pode ser alterada por outras pessoas, um getter pode ajudar:
EDITAR
Desde o PHP5.4, é possível acessar valores de array sem a necessidade de variáveis intermediárias, ou seja, o seguinte funciona:
fonte
const AtomicValue =42; public static $fooArray = ('how','di')
Eu estou usando assim. Espero que ajude os outros.
config.php
Em arquivo, onde eu preciso de constantes.
fonte
É isso que eu uso. É semelhante ao exemplo fornecido pelo soulmerge, mas dessa forma você pode obter a matriz completa ou apenas um valor único na matriz.
Use-o assim:
fonte
Você pode armazená-lo como uma sequência JSON em uma constante. E do ponto de vista da aplicação, o JSON pode ser útil em outros casos.
fonte
A partir do PHP 5.6, você pode definir matrizes constantes usando
const
palavras-chave como abaixoe diferentes elementos podem ser acessados como abaixo:
A partir do PHP 7, matrizes constantes podem ser definidas usando-se
define
como abaixo:e diferentes elementos podem ser acessados da mesma maneira que antes.
fonte
Eu sei que é uma pergunta um pouco antiga, mas aqui está a minha solução:
Eu o defini porque precisava armazenar objetos e matrizes em constantes, então instalei também o runkit no php para poder tornar a variável $ const superglobal.
Você pode usá-lo como
$const->define("my_constant",array("my","values"));
ou apenas$const->my_constant = array("my","values");
Para obter o valor, basta chamar
$const->my_constant;
fonte
__get
e__set
... devo dizer que esse método é ótimo.PHP 7+
No PHP 7, você pode simplesmente usar a função define () para definir uma matriz constante:
fonte
Pode até trabalhar com matrizes associativas. Por exemplo, em uma classe.
fonte
Usando a função explodir e implodir, podemos improvisar uma solução:
Isso ecoará
email
.Se você deseja otimizá-lo mais, você pode definir 2 funções para fazer as coisas repetitivas para você assim:
Espero que ajude . Feliz codificação.
fonte
Fazer algum tipo de truque de ser / deser ou codificar / decodificar parece feio e exige que você se lembre exatamente do que fez quando está tentando usar a constante. Eu acho que a variável estática privada de classe com o acessador é uma solução decente, mas farei uma melhor. Basta ter um método público getter estático que retorne a definição da matriz constante. Isso requer um mínimo de código extra e a definição da matriz não pode ser modificada acidentalmente.
Se você realmente quer fazer com que pareça uma constante definida, pode dar um nome com maiúsculas, mas seria confuso lembrar de adicionar os parênteses '()' após o nome.
Suponho que você possa tornar o método global mais próximo da funcionalidade define () que estava solicitando, mas realmente deve definir o nome da constante de qualquer maneira e evitar globais.
fonte
Você pode definir assim
fonte
Sim, você pode definir uma matriz como constante. A partir do PHP 5.6 , é possível definir uma constante como uma expressão escalar, e também é possível definir uma constante da matriz . É possível definir constantes como um recurso, mas deve ser evitado, pois pode causar resultados inesperados.
Com a referência deste link
Tenha uma codificação feliz.
fonte
Se você está procurando isso em 2009 e não gosta de AbstractSingletonFactoryGenerators, aqui estão algumas outras opções.
Lembre-se de que as matrizes são "copiadas" quando atribuídas ou, nesse caso, retornadas, portanto, você praticamente obtém a mesma matriz sempre. (Veja o comportamento de cópia na gravação de matrizes em PHP.)
fonte
se você estiver usando PHP 7 e 7+, também pode usar a busca assim
fonte
As constantes podem conter apenas valores escalares. Sugiro que você armazene a serialização (ou representação codificada em JSON) da matriz.
fonte