define() vs const em PHP: o que escolher em 2024 (+código)

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

define() vs const em PHP: guia completo com exemplos

\n\n

Todo 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.

\n\n

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\n

Pronto? Vamos lá!

\n\n

O que é uma constante em PHP?

\n\n

Antes 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\n

Constantes 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\n

Ambas as formas funcionam. Mas vamos aprofundar.

\n\n

Principais diferenças entre define() e const

\n\n

1. Momento da definição

\n\n

Este é 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).

\n\n

O que isso significa na prática?

\n\n
    \n
  • const só pode ser usado para declarar constantes no nível superior do script ou dentro de uma classe. Você não pode colocar const dentro de um loop for, uma condição if ou uma função.
  • \n
  • define() pode ser chamado em qualquer lugar: dentro de loops, condições, funções. Isso oferece flexibilidade.
  • \n
\n\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\n

Conclusão: se você precisa definir uma constante dinamicamente (por exemplo, dependendo de uma condição ou dentro de uma função), escolha define().

\n\n

2. Tipos de dados

\n\n

Em PHP 7 e 8, define() suporta mais tipos de dados do que const.

\n\n
    \n
  • const pode 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
\n\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\n

Conclusão: para a maioria das tarefas, ambas as opções funcionam. Mas se você precisa armazenar um objeto — apenas define().

\n\n

3. Contexto: constantes globais vs de classe

\n\n

const é uma ferramenta universal. Pode ser usado tanto fora de classes (constantes globais) quanto dentro de classes (constantes de classe).

\n\n

define() — apenas para constantes globais. Dentro de uma classe

Blogs

Book Recommendations