Sintaxe

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:

  • Constantes não possuem um sinal de cifrão ($) antes delas;
  • Antes do PHP 5.3 as constantes só poderiam ser definidas utilizando a função define(), e não por simples assimilação;
  • Constantes podem ser definidas e acessadas de qualquer lugar sem que a regras de escopo de variáveis sejam aplicadas;
  • Constantes não podem ser redefinidas ou eliminadas depois de criadas; e
  • Constantes só podem ter valores escalares. A partir do PHP 5.6 é possível definir um array constante com a instrução 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ções ifs ou blocos try/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.

add a note add a note

User Contributed Notes 4 notes

up
9
login at (two)view dot de
6 years ago
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.
up
-3
halfhearted13 at gmail dot com
3 years ago
Constants of constant :

<?php

const foo = hello;
const
bar = foo;
const
bd = bar;

echo
"bd = " .bd;   // Prints out: Hello

?>
up
-8
privat at ulrich-kapp dot de
4 years ago
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] => …
)
up
-12
mh at hanft dot de
4 years ago
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.
To Top