Sintaxe
As constantes podem ser definidas usando a palavra-chave const
ou usando a função define().
Enquanto define() permite que uma constante seja
definida usando uma expressão arbitrária, a palavra-chave const
possui
restrições, conforme descrito no próximo parágrafo.
Uma vez definida, a constante nunca poderá ser modificada ou
anulada.
Ao usar a palavra-chave const
,
somente expressões escalares (bool, int,
float e string) e
arrays constantes contendo apenas expressões escalares são aceitos.
É possível definir constantes como um resource,
mas isso deve ser evitado, pois pode causar resultados inesperados.
O valor de uma costante é acessado simplesmente informando seu nome.
Ao contrário das variáveis, uma constante não é precedida
por um $
.
Também é possível usar a função constant() para
ler o valor de uma constante se o nome da constante for obtido dinamicamente.
Use get_defined_constants() para obter uma lista de
todas as constantes definidas.
Nota:
As constantes e variáveis (globais) estão em espaços de nomes diferentes.
Isso implica que, por exemplo, true
e
$TRUE são geralmente diferentes.
Se uma constante indefinida for usada, um erro Error será lançado.
Antes do PHP 8.0.0, constantes indefinidas eram interpretadas como uma simples
string, ou seja, CONSTANTE vs. "CONSTANTE".
Esse mecanismo alternativo foi descontinuado a partir do PHP 7.2.0 e um alerta de nível
E_WARNING
será lançado quando isso acontecer.
Antes do PHP 7.2.0, um erro de nível
E_NOTICE era lançado.
Veja também por que
$foo[bar] é
errado (a não ser que bar
seja uma constante).
Isso não se aplica às constantes (totalmente) qualificadas,
que sempre lançarão um Error se forem indefinidas.
Nota:
Para verificar se uma constante está definida, use a função defined().
Estas são as diferenças entre constantes e variáveis:
-
Constantes não têm um cifrão (
$
)
antes delas;
-
Constantes podem ser definidas e acessadas em qualquer lugar sem considerar
as regras de escopo de variáveis;
-
Constantes não podem ser redefinidas ou anuladas depois de
definidas; e
-
Constantes só podem ter valores escalares ou arrays.
Exemplo #1 Definindo Constantes
<?php
define("CONSTANTE", "Olá Mundo.");
echo CONSTANTE; // imprime "Olá Mundo."
echo Constante; // Lança um erro Error: Undefined constant "Constante"
// Antes do PHP 8.0.0, imprime "Constante" e emite um aviso.
?>
Exemplo #2 Definindo Constantes usando a palavra-chave const
<?php
// Valor escalar simples
const CONSTANTE = 'Olá Mundo';
echo CONSTANTE;
// Expressão escalar
const OUTRA_CONSTANTE = CONSTANTE . '; Adeus Mundo';
echo OUTRA_CONSTANTE;
const ANIMAIS = array('cachorro', 'gato', 'pássaro');
echo ANIMAIS[1]; // imprime "gato"
// Array constante
define('ANIMAIS', array(
'cachorro',
'gato',
'pássaro'
));
echo ANIMAIS[1]; // imprime "gato"
?>
Nota:
Ao contrário das constantes definidas usando define(),
as constantes definidas usando a palavra-chave const
devem
ser declaradas no escopo mais externo porque são definidas em tempo de compilação.
Isto significa que constantes não podem ser declaradas dentro de funções, loops,
declarações if
ou
blocos try
/catch
.