Menu

Constantes em PHP: define() ou const e constantes mágicas

Uma constante PHP é um nome para um valor que não pode mudar: const MAX_USERS = 100; ou define('MAX_USERS', 100);. Veja define ou const, arrays constantes, constantes de classe com self::, verificação com defined() e as constantes mágicas __LINE__, __FILE__, __DIR__ e __CLASS__.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Uma constante é um nome para um valor que nunca muda enquanto o script roda. Declare com const MAX_USERS = 100; ou define('MAX_USERS', 100); e depois use o nome puro, sem $.

Por convenção, nomes de constantes ficam em UPPER_SNAKE_CASE. Elas são globais: uma constante declarada no topo de um arquivo é visível dentro de todas as funções sem global.

define() ou const

Os dois criam uma constante, mas funcionam em momentos diferentes. const é resolvido quando o PHP compila o arquivo, define() roda como qualquer outra chamada de função.

constdefine()
Dentro de if, loops, funçõesNãoSim
Nome montado a partir de variávelNãoSim
Constantes de classeSimNão
Valor pode ser uma expressãoSim, de constantes e literaisSim, qualquer valor
Entra no namespace automaticamenteSimNão (passe o nome completo)

Use const por padrão, porque é mais curto e verificado em tempo de compilação. Use define() quando a constante depender de uma condição ou de um nome calculado.

Constantes não podem ser alteradas

Atribuir a uma constante é um erro de sintaxe:

<?php
const LIMIT = 10;
LIMIT = 20;
PHP Parse error:  syntax error, unexpected token "=" in /home/index.php on line 3

Definir a mesma constante duas vezes não é erro, mas o PHP imprime um aviso e mantém o primeiro valor:

<?php
define("LIMIT", 10);
define("LIMIT", 20);
echo LIMIT; // 10
Warning: Constant LIMIT already defined in /home/index.php on line 3

Quando um valor talvez já esteja definido (por exemplo, num arquivo de configuração carregado mais de uma vez), verifique antes com defined():

Arrays constantes

Uma constante pode guardar um array. Você pode lê-lo com NAME[key], percorrê-lo e passá-lo adiante, mas não modificá-lo.

Constantes de classe

Dentro de uma classe, const declara uma constante que pertence à classe. Leia com ClassName::NAME de fora e self::NAME ou static::NAME de dentro. Constantes de classe podem ter visibilidade, podem ser final e, desde o PHP 8.3, podem declarar um tipo.

Um grupo de constantes de classe relacionadas, como STATUS_NEW e STATUS_PAID, muitas vezes fica melhor como um enum, que também impede que valores inválidos circulem pelo código.

Constantes mágicas: LINE, FILE, DIR e outras

Constantes mágicas mudam de valor conforme o lugar onde aparecem. Elas são preenchidas em tempo de compilação.

A mais usada é __DIR__, o diretório do arquivo atual. Montar caminhos de include a partir dela faz com que funcionem não importa de qual diretório o script foi iniciado: require __DIR__ . '/config.php';. Veja include e require para o padrão completo.

Constantes nativas que vale a pena conhecer

O PHP define muitas constantes próprias. Estas aparecem o tempo todo:

PHP_EOL é o fim de linha do sistema onde o PHP roda ("\n" no Linux e no macOS, "\r\n" no Windows). Ela serve para texto escrito em arquivos e no terminal; na saída HTML uma quebra de linha não aparece, então use <br> ali.

Perguntas frequentes

Qual a diferença entre define() e const no PHP?

const é uma construção da linguagem resolvida quando o arquivo é compilado: funciona no nível superior e dentro de classes, mas não dentro de if, loops ou funções. define() é uma função chamada em tempo de execução, então funciona em qualquer lugar e o nome pode ser montado a partir de uma variável, mas não declara constantes de classe.

Uma constante PHP pode ser um array?

Sim. Tanto const COLORS = ['red', 'green']; quanto define('COLORS', ['red', 'green']); funcionam, e você lê um elemento com COLORS[0]. O array não pode ser modificado depois.

Como verifico se uma constante está definida no PHP?

Use defined('NAME'), que recebe o nome como string e retorna true ou false. Um padrão comum é if (!defined('APP_ENV')) { define('APP_ENV', 'production'); }. Para constantes de classe, passe 'ClassName::NAME'.

O que são constantes mágicas no PHP?

Constantes cujo valor depende de onde elas estão escritas: __LINE__ (linha atual), __FILE__ (caminho completo do arquivo), __DIR__ (o diretório dele), __FUNCTION__, __CLASS__, __METHOD__ e __NAMESPACE__. Elas são escritas com dois underscores de cada lado e não diferenciam maiúsculas de minúsculas.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR