Constantes e inclusões
Constantes são valores que nunca mudam. Senhas de bancos de dados, chaves de API, nomes de sites — qualquer dado que permaneça o mesmo durante toda a execução do seu programa deve ser uma constante, e não uma variável. Esta lição também ensina como dividir seu código em vários arquivos usando
includeerequire.
1. define() x const
O PHP oferece duas maneiras de declarar constantes:
<?php
// define() — declared at runtime (can be used anywhere)
define("SITE_NAME", "My Blog");
define("MAX_UPLOAD_SIZE", 5 * 1024 * 1024); // 5MB
define("DB_HOST", "localhost");
// const — declared at compile time (global scope only)
const APP_VERSION = "2.0.0";
const PI = 3.14159;
echo SITE_NAME; // My Blog (note: no $ prefix)
echo APP_VERSION; // 2.0.0
?>
define() |
const |
|
|---|---|---|
| Onde | Em qualquer lugar (dentro de funções/condições) | Apenas no escopo global |
| Tempo | Tempo de execução | Tempo de compilação (um pouco mais rápido) |
| Matrizes | ✅ PHP 7+ | ✅ PHP 5.6+ |
| Expressões | ✅ | ❌ Apenas valores simples |
| Ideal para | Configuração, definições condicionais | Constantes de classe |
const — é um pouco mais rápido e fica mais claro. Use define() apenas quando precisar de um valor calculado dinamicamente ou precisar definir uma constante dentro de uma função ou bloco condicional.
(1) Convenção de nomenclatura
As constantes devem ser escritas em letras maiúsculas com sublinhados (SCREAMING_SNAKE_CASE):
<?php
const MAX_LOGIN_ATTEMPTS = 5;
const DEFAULT_LANGUAGE = "en-US";
const API_BASE_URL = "https://api.example.com/v1";
?>
(2) Verificando se uma constante existe
<?php
if (!defined("SITE_NAME")) {
define("SITE_NAME", "Default Site Name");
}
// defined() checks whether a constant is already set
?>
2. Constantes mágicas
O PHP oferece um conjunto de “constantes mágicas” cujos valores mudam automaticamente dependendo de onde são utilizadas:
<?php
// Assume the file path is: C:\xampp\htdocs\myphp\demo.php
echo __LINE__; // Current line number: 7
echo __FILE__; // Full file path: C:\xampp\htdocs\myphp\demo.php
echo __DIR__; // Directory of the file: C:\xampp\htdocs\myphp
echo __FUNCTION__; // Current function name (inside a function)
echo __CLASS__; // Current class name (inside a class)
echo __METHOD__; // Current method name (inside a method)
echo __NAMESPACE__; // Current namespace
?>
▶ Exemplo: Caminhos confiáveis com __DIR__
<?php
// ❌ Fragile relative path
$config = include "config.php";
// ✅ Always resolves to the correct absolute path
$config = include __DIR__ . "/config.php";
$avatar = __DIR__ . "/uploads/avatars/" . $userId . ".jpg";
?>
__DIR__ é a constante mágica que você mais usará no dia a dia do desenvolvimento. Sempre use __DIR__ para construir caminhos em seus arquivos de inclusão — isso garante que o arquivo seja encontrado, independentemente do diretório de onde o script for chamado.
3. include x require
Divida seu código em vários arquivos e importe-os usando include ou require:
<?php
// config.php
const DB_HOST = "localhost";
const DB_NAME = "myapp";
?>
<?php
// index.php
require __DIR__ . "/config.php";
echo "Database host: " . DB_HOST; // Constants are now available
?>
include |
require |
|
|---|---|---|
| Arquivo não encontrado | ⚠️ Aviso, o script continua | 🔴 Erro fatal, o script é interrompido |
| Reutilização | Pode ser incluído várias vezes | Pode ser incluído várias vezes |
| Ideal para | Conteúdo opcional | Configurações essenciais, bibliotecas de funções |
require por padrão. Se um arquivo de configuração ou uma biblioteca de funções estiver faltando, seu script deve parar imediatamente, em vez de continuar funcionando com a lógica prejudicada. Reserve include para elementos realmente opcionais, como banners publicitários ou trechos de análise.
(1) include_once e require_once
Evite que o mesmo arquivo seja carregado mais de uma vez:
<?php
require_once __DIR__ . "/config.php";
require_once __DIR__ . "/config.php"; // Second call does nothing
?>
require_once para arquivos que definem funções ou classes (redefinir essas funções ou classes causaria um erro fatal). Use simplesmente require para fragmentos de modelo HTML que você possa incluir várias vezes intencionalmente.
4. Constantes predefinidas
O PHP vem com várias constantes globais integradas:
<?php
echo PHP_VERSION; // 8.2.7
echo PHP_INT_MAX; // 9223372036854775807 (64-bit)
echo PHP_INT_MIN; // -9223372036854775808
echo PHP_FLOAT_MAX; // 1.7976931348623E+308
echo PHP_EOL; // Line break (\n or \r\n depending on OS)
echo DIRECTORY_SEPARATOR; // \ (Windows) or / (Unix)
echo PATH_SEPARATOR; // ; (Windows) or : (Unix)
?>
Elas são especialmente úteis para escrever código multiplataforma.
5. Desenvolvimento modular na prática
Organize seu site em vários arquivos interligados por meio de require:
myphp/
├── config.php ← Database config, constants
├── functions.php ← Shared functions
├── header.php ← Page header HTML
├── footer.php ← Page footer HTML
├── index.php ← Home page
└── about.php ← About page
▶ Exemplo: Uma página modular
<?php
// header.php
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title><?= $pageTitle ?? "My Website" ?></title>
</head>
<body>
<header>
<h1><?= SITE_NAME ?></h1>
<nav>
<a href="/">Home</a>
<a href="about.php">About</a>
</nav>
</header>
<main>
<?php
// footer.php
?>
</main>
<footer>
<p>© <?= date("Y") ?> <?= SITE_NAME ?></p>
</footer>
</body>
</html>
<?php
// about.php
define("SITE_NAME", "My Blog");
$pageTitle = "About Us";
require __DIR__ . "/header.php";
?>
<h2>About Us</h2>
<p>We're a team passionate about technology.</p>
<?php
require __DIR__ . "/footer.php";
?>
@include, @extends e @section do Blade são a evolução moderna exatamente dessa ideia.
❓ Perguntas Frequentes
P: Devo usar
constoudefine()? R: Useconstpara constantes globais simples — é mais rápido e mais claro. Usedefine()quando precisar de um valor calculado em tempo de execução ou precisar definir dentro de uma condição ou função. Dentro de uma classe, apenasconstfunciona.
P:
includeourequire— qual deles? R: O padrão érequire. A falta de arquivos de configuração e bibliotecas de funções deve gerar um erro imediato. Os casos em que se usaincludesão raros — trata-se de conteúdo opcional, como anúncios ou trechos de análise, em que a página deve continuar funcionando mesmo sem eles.
P: Por que
requirefalha, mesmo que o arquivo definitivamente exista? R: Em 99% dos casos, trata-se de um problema de caminho. Faça a depuração comecho __DIR__ . "/config.php"para confirmar o caminho completo que está sendo construído. Lembre-se de que os caminhos relativos são relativos ao diretório de trabalho atual, e não ao diretório do script — é por isso que__DIR__é a maneira mais segura de construir caminhos.
📖 Resumo
const(global, rápida) edefine()(dinâmica) são as duas formas de declarar constantes- Os nomes de constantes utilizam
SCREAMING_SNAKE_CASEsem o prefixo$ - Constantes mágicas:
__DIR__(diretório),__FILE__(caminho do arquivo),__LINE__(número da linha) requiregera um erro fatal quando o arquivo não está presente;includeapenas exibe um aviso__DIR__é a maneira mais confiável de construir caminhos de arquivosrequire_onceevita o carregamento duplicado de definições de funções/classes
📝 Exercícios
- Crie um arquivo
config.phpque defina constantes para o nome do site, o host do banco de dados e o caminho do diretório de upload. Em seguida, chame esse arquivorequirea partir de outra página PHP e use as constantes para exibir sua configuração. - Divida uma página do blog em
header.php,footer.phpeindex.php. Use__DIR__para criar todas as referências de caminho em suas instruçõesrequire. - Escreva um código que utilize
defined()para verificar se uma constante foi definida e, caso não tenha sido, defina um valor padrão.



