Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:
define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));
does work as expected.
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:
$
)
antes delas;
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çõesif
ou blocostry
/catch
.
Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:
define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));
does work as expected.
Constants of constant :
<?php
const foo = hello;
const bar = foo;
const bd = bar;
echo "bd = " .bd; // Prints out: Hello
?>
const ArrayFromTextfile = file("mytextfile.txt", FILE_IGNORE_NEW_LINES);
does not work, it throws an error:
Fatal error: Constant expression contains invalid operations in php shell code on line …
Instead use:
define ("ArrayFromTextfile", file("mytextfile.txt", FILE_IGNORE_NEW_LINES));
print_r(ArrayFromTextfile);
Result:
Array
(
[0] ⇨ Line 1
[1] ⇨ Line 2
[2] ⇨ Line 3
[3] => …
)
With PHP 5.6, multi-dimensional arrays are also possible if you use "const" instead of "define". So,
define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul')));
won't work with PHP 5.6, but
const QUARTLIST=array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));
will.