const
Aprenda a usar a palavra-chave const em PHP para declarar constantes globais e de classe com exemplos práticos e dicas essenciais.
A palavra-chave const do PHP
Uma constante é um valor nomeado que não pode mudar durante a execução de um script. A palavra-chave const é uma das duas formas que o PHP oferece para declarar uma constante (a outra é a função define()). Ao contrário de uma variável, uma constante não tem o $ no início e, uma vez definida, não pode ser reatribuída nem removida com unset().
Este guia aborda o que const faz, como ela difere de define(), onde é permitido utilizá-la e as armadilhas mais comuns que costumam confundir os desenvolvedores.
Sintaxe
Você pode usar const no nível superior de um script (uma constante global) ou dentro de uma classe, interface ou trait (uma constante de classe):
const NAME = value; // global constantclass ClassName {
const NAME = value; // class constant, accessed as ClassName::NAME
}Por convenção, os nomes de constantes são escritos em UPPER_SNAKE_CASE. Um nome deve começar com uma letra ou sublinhado e conter apenas letras, dígitos e sublinhados.
const vs define()
O PHP oferece duas ferramentas com aparência semelhante, mas comportamentos diferentes. Conhecer as diferenças economiza tempo de depuração:
| Característica | const | define() |
|---|---|---|
| Avaliada | Em tempo de compilação | Em tempo de execução |
Pode ser usada condicionalmente (dentro de if) | Não | Sim |
| Funciona dentro de uma classe | Sim (constante de classe) | Não |
| Nome a partir de variável/expressão | Não | Sim (define($name, ...)) |
| Valor | Apenas expressões constantes | Qualquer expressão |
Regra geral: use const para valores fixos e sempre definidos (especialmente constantes de classe), e define() quando o nome ou o valor é decidido durante a execução do programa.
<?php
// define() can be conditional; const cannot.
if (!defined('ENVIRONMENT')) {
define('ENVIRONMENT', 'production');
}
// This would be a fatal parse error — const cannot live inside an if-block:
// if (true) { const FOO = 1; }Consulte o capítulo dedicado a define() e a visão geral de constantes PHP para mais informações.
Exemplos
Constante de classe e constante global
<?php
// Example 1 — a class constant referenced with self::
class Circle
{
const PI = 3.14;
public $radius;
public function __construct($radius)
{
$this->radius = $radius;
}
public function getArea()
{
return self::PI * $this->radius * $this->radius;
}
}
$myCircle = new Circle(5);
echo "Area of circle: " . $myCircle->getArea() . PHP_EOL;
// Output: Area of circle: 78.5
// Example 2 — a global constant
const MY_NAME = "John";
echo "My name is " . MY_NAME;
// Output: My name is JohnVocê lê uma constante de classe com o operador :: (resolução de escopo) — self::PI de dentro da classe e Circle::PI de fora. Uma constante global é usada pelo nome sem $. Para saber mais sobre classes, consulte classes e objetos em PHP e o capítulo sobre constantes de classe.
Expressões constantes e arrays
O valor de uma const deve ser uma expressão constante — algo que o PHP pode avaliar sem executar nenhum código. Você pode usar literais, operadores e outras constantes já definidas e (desde o PHP 5.6) o resultado pode ser um array.
<?php
const SECONDS_PER_MINUTE = 60;
const SECONDS_PER_HOUR = SECONDS_PER_MINUTE * 60; // built from another const
const ALLOWED_ROLES = ['admin', 'editor', 'viewer'];
echo SECONDS_PER_HOUR . PHP_EOL; // 3600
echo ALLOWED_ROLES[1] . PHP_EOL; // editorChamadas de função e instâncias de objetos não são permitidas como valor de const, pois não podem ser resolvidas em tempo de compilação.
Constantes de classe: visibilidade, interfaces e final
Constantes de classe pertencem à classe, não a um objeto específico, portanto não é necessário ter uma instância para lê-las. Desde o PHP 7.1, você também pode atribuir um modificador de visibilidade a elas:
<?php
interface HasStatus
{
// Interface constants are always public.
const DEFAULT_STATUS = 'pending';
}
class Order implements HasStatus
{
public const TAX_RATE = 0.2; // readable everywhere
protected const MAX_QTY = 99; // this class + subclasses
private const SECRET = 'x'; // this class only
public function status(): string
{
return self::DEFAULT_STATUS; // inherited from the interface
}
}
echo Order::TAX_RATE . PHP_EOL; // 0.2
echo (new Order())->status() . PHP_EOL; // pendingInterfaces também podem declarar constantes (sempre públicas) — veja interfaces PHP. Uma constante de classe pode ser marcada como final (PHP 8.1+) para impedir que subclasses a sobrescrevam.
Armadilhas comuns
- Sem
$em uma constante.echo MY_NAME;funciona;echo $MY_NAME;procura uma variável e falha. - Não pode ser alterada ou removida. Reatribuir uma constante é um erro fatal;
unset()não funciona em constantes. - Somente em tempo de compilação. Você não pode colocar
constdentro de umif, laço ou função baseada em dados de tempo de execução — usedefine()para isso. - Constantes têm escopo global. Uma
constglobal é visível dentro de funções sem usarglobal, ao contrário de uma variável comum.
Benefícios
- Legibilidade: uma constante nomeada como
TAX_RATEdocumenta a intenção muito melhor do que um número mágico. - Manutenibilidade: altere um valor em um único lugar em vez de procurar cada literal no código.
- Segurança: o valor é somente leitura, portanto não pode ser sobrescrito por acidente em nenhum lugar do código.
Conclusão
A palavra-chave const define constantes em tempo de compilação — tanto globais quanto dentro de classes — que permanecem fixas durante toda a vida de um script. Use-a para valores fixos que você sempre conhece de antemão, prefira constantes de classe para valores que pertencem a um tipo e recorra a define() quando precisar de uma constante criada condicionalmente ou com um nome dinâmico. Para aprofundar o conhecimento, continue com os capítulos sobre constantes PHP e constantes de classe.