define()
Aprenda como a função PHP define() cria constantes, suas diferenças em relação a const, os valores aceitos e detalhes sobre a sensibilidade a maiúsculas.
O Que a Função define() Faz
A função define() cria uma constante — um valor nomeado que não pode ser alterado após ser definido. Diferente de uma variável, uma constante não possui o prefixo $, é global em todo o script (inclusive dentro de funções) e qualquer tentativa de redefini-la gera um aviso em vez de sobrescrever silenciosamente o valor.
Use define() quando quiser uma fonte única de verdade para um valor que nunca deve mudar em tempo de execução: um sinalizador de configuração, um número de versão, um caminho de arquivo ou um endpoint de API.
Sintaxe
define(string $name, mixed $value, bool $case_insensitive = false): bool$name— o nome da constante. Por convenção, usa-se letras maiúsculas com sublinhados (MAX_USERS), mas qualquer identificador válido funciona.$value— o valor a ser armazenado. Escalares (int,float,string,bool) enullsempre foram permitidos; arrays tornaram-se valores válidos no PHP 7.0.$case_insensitive(opcional) — historicamente, passartruepermitia ler a constante com qualquer capitalização. Este parâmetro foi descontinuado no PHP 7.3 e removido no PHP 8.0, portanto, omita-o e trate os nomes de constantes como sensíveis a maiúsculas e minúsculas.
define() retorna true em caso de sucesso e false em caso de falha.
Um Exemplo Básico
Aqui, define() cria uma constante chamada GREETING contendo Hello, world!, e então echo a exibe pelo nome — sem $ e sem aspas.
Armazenando um Array em uma Constante
Desde o PHP 7.0, uma constante pode armazenar um array, o que é útil para tabelas de consulta fixas ou listas de opções:
<?php
define("ROLES", ["admin", "editor", "viewer"]);
echo ROLES[1]; // editor
?>Verificando Antes de Usar uma Constante
Ler uma constante indefinida é um erro no PHP 8.0+. Proteja com defined() para que seu código se comporte adequadamente:
<?php
if (!defined("APP_ENV")) {
define("APP_ENV", "production");
}
echo APP_ENV; // production
?>define() vs. const
PHP oferece duas formas de declarar uma constante, e elas não são intercambiáveis:
| Característica | define() | const |
|---|---|---|
| Quando é executado | Em tempo de execução | Em tempo de compilação |
| Uso condicional / em laço | Sim — pode estar dentro de if/for | Não — deve ser de nível superior ou em uma classe |
| Nome dinâmico | Sim — o nome pode ser uma variável | Não — o nome é fixo |
| Constantes de classe | Não | Sim |
Use define() quando o nome ou valor for calculado, ou quando a declaração precisar ser condicional. Use const para constantes simples, sempre declaradas, e para constantes de classe.
Armadilhas Comuns
- Sem
$e sem aspas ao ler. Escrevaecho GREETING;, nãoecho $GREETING;ouecho "GREETING";. - Redefinir gera aviso, não sobrescreve. Um segundo
define("GREETING", ...)emite um aviso e o valor original é mantido. - Nomes são sensíveis a maiúsculas e minúsculas.
GREETINGeGreetingsão duas constantes diferentes agora que o parâmetro de insensibilidade foi removido. - Defina uma vez, cedo. Como as constantes são globais e permanentes, defina-as próximo ao início do seu script ou em um arquivo de configuração.
Conclusão
define() é a forma de criar um valor global e imutável em PHP em tempo de execução. Combine com defined() para evitar avisos de redefinição, prefira const para constantes fixas em tempo de compilação e de classe, e consulte PHP Constants para uma visão mais ampla.