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.
Você pode definir uma constante utilizando a função
define(), ou a palavra-chave
const
fora da definição de uma classe a partir do
PHP 5.3.0. Enquanto define() permite que uma constante seja
definida para uma expressão arbitrária, a palavra-chave const
possui
restrições conforme descrita no próximo parágrafo.
Uma vez definida, a constante não poderá ser modificada ou
anulada.
Ao usar a palavra-chave const
,
somente dados escalares (boolean, integer,
float e string) podem ser colocados
em constantes até o PHP 5.6. A partir do PHP 5.6, é possível também utilizar
qualquer expressão escalar como constantes e também
array constante. É permitido o uso de um resource
(recurso) como valor de constante, mas deve ser evitado, já que pode causar
resultados inesperados.
Pode-se obter o valor de uma constante simplesmente especificando seu nome.
Diferentemente de variáveis, você não prefixará uma
constante com um sinal de $
.
Também pode-se utilizar a função constant() para
ler o valor de uma constante, se você precisar obter seu valor
dinamicamente.
Utilize get_defined_constants() para obter a lista de
todas as constantes definidas.
Nota: As constantes e variáveis (globais) estão em espaços de nomes diferentes. Isto implica, por exemplo, que
true
e $TRUE sejam geralmente diferentes.
Ao usar-se uma constante indefinida, o PHP assumirá o nome
da constante como seu próprio valor, como se tivesse chamando-a como
uma string (CONSTANT vs "CONSTANT").
Este comportamento é depreciado a partir do PHP 7.2.0, e um erro de nível
E_WARNING
é emitido quando isso acontece
(antes, um erro de nível
E_NOTICE era emitido
Veja também a referência do manual sobre o porquê
$foo[bar] é
errado (a não ser que bar
primeiro seja definida
define() como uma constante). Isto não se aplica a constantes totalmente qualificadas,
que lançarão um erro fatal se não estiverem definidas. Se você simplesmente quer
checar se uma constante foi definida, utilize a função defined().
Estas são as diferenças entre constantes e variáveis:
$
)
antes delas;
const
e a partir do
PHP 7 arrays constantes também podem ser definidas utilizando a função define()
Pode-se utilizar arrays em expressões escalares constantes
(por exemplo const FOO = array(1,2,3)[0];
),
cujo resultado final deve ser um valor de um tipo permitido.
Exemplo #1 Definindo Constantes
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // imprime "Hello world."
echo Constant; // imprime "Constant" e gera um alerta notice.
?>
Exemplo #2 Definindo Constantes usando a palavra-chave const
<?php
// Funciona a partir do PHP 5.3.0
const CONSTANT = 'Hello World';
echo CONSTANT;
// Funciona a partir do PHP 5.6.0
const ANOTHER_CONST = CONSTANT.'; Goodbye World';
echo ANOTHER_CONST;
const ANIMALS = array('dog', 'cat', 'bird');
echo ANIMALS[1]; // imprime "cat"
// A partir do PHP 7
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo ANIMALS[1]; // imprime "cat"
?>
Nota:
Ao contrário das funções definidas através de define(), as constantes definidas usando a palavra-chave
const
devem ser declarados no escopo de maior nível, pois são definidas no tempo de compilação. Isso significa que não podem ser definidas dentro de funções, laços ou instruçõesif
s ou blocostry
/catch
.
Nota:
Constantes definidas usando a palavra-chave
const
sempre serão case-sensitive, enquanto as constantes usando define() podem ser case-insensitive.
Veja também Constantes de Classe.
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.