define() vs const em PHP: guia completo com exemplos
\n\nTodo desenvolvedor PHP, mais cedo ou mais tarde, se depara com a pergunta: qual a melhor forma de declarar uma constante — com define() ou com a palavra-chave const? À primeira vista, quase não há diferença. Ambas as opções criam um valor imutável. Mas o diabo, como sempre, está nos detalhes.
Este artigo não é um resumo chato do manual. Vamos analisar casos reais onde uma abordagem vence e a outra falha. Você aprenderá como declarar constantes corretamente em PHP 7 e PHP 8 e poderá escrever um código mais limpo e previsível.
\n\nPronto? Vamos lá!
\n\nO que é uma constante em PHP?
\n\nAntes de comparar, vamos relembrar o básico. Uma constante é um identificador (nome) para um valor simples. Sua principal propriedade: o valor não pode ser alterado ou removido durante a execução do script.
\n\nConstantes são úteis para armazenar configurações, caminhos de arquivos, chaves de API e outros dados estáticos.
\n\n<?php\n// Definindo uma constante com define()\ndefine('SITE_NAME', 'PythonLib');\n\n// Definindo uma constante com const\nconst SITE_URL = 'https://pythonlib.ru';\n\necho SITE_NAME; // PythonLib\necho SITE_URL; // https://pythonlib.ru\n?>\n\nAmbas as formas funcionam. Mas vamos aprofundar.
\n\nPrincipais diferenças entre define() e const
\n\n1. Momento da definição
\n\nEste é o ponto mais importante. const é uma construção da linguagem que é processada em tempo de compilação (antes da execução do script). define() é uma função que é executada em tempo de execução (durante a execução do script).
O que isso significa na prática?
\n\n- \n
constsó pode ser usado para declarar constantes no nível superior do script ou dentro de uma classe. Você não pode colocarconstdentro de um loopfor, uma condiçãoifou uma função. \n define()pode ser chamado em qualquer lugar: dentro de loops, condições, funções. Isso oferece flexibilidade. \n
<?php\n// Isso funciona\nif (true) {\n define('DB_HOST', 'localhost');\n}\n\n// Isso causa um erro fatal\nif (true) {\n // const DB_HOST = 'localhost'; // Erro!\n}\n\n// Mas const pode ser usado em uma classe\nclass Config {\n const DB_NAME = 'test';\n}\n?>\n\nConclusão: se você precisa definir uma constante dinamicamente (por exemplo, dependendo de uma condição ou dentro de uma função), escolha define().
2. Tipos de dados
\n\nEm PHP 7 e 8, define() suporta mais tipos de dados do que const.
- \n
constpode aceitar apenas valores escalares (int, float, string, bool, null) e arrays (a partir do PHP 5.6). \n define()a partir do PHP 7 também suporta arrays, e no PHP 8 — até mesmo objetos (embora seja um caso raro). \n
<?php\n// const pode armazenar array (desde PHP 5.6)\nconst FRUITS = ['apple', 'banana', 'cherry'];\n\n// define() também pode (desde PHP 7)\ndefine('VEGETABLES', ['carrot', 'potato']);\n\n// Já um objeto — apenas com define() (PHP 8+)\n// const OBJECT = new stdClass(); // Erro!\ndefine('MY_OBJECT', new stdClass()); // Funciona\n?>\n\nConclusão: para a maioria das tarefas, ambas as opções funcionam. Mas se você precisa armazenar um objeto — apenas define().
3. Contexto: constantes globais vs de classe
\n\nconst é uma ferramenta universal. Pode ser usado tanto fora de classes (constantes globais) quanto dentro de classes (constantes de classe).
define() — apenas para constantes globais. Dentro de uma classe