artigos

PHP a fundo, um artigo de cada vez.

Guias e artigos para estudar PHP a fundo — do manual oficial para a prática.

em destaque
24/08/2026 9 min de leitura

Closure vs callable no PHP: qual a diferença e quando usar cada um

callable é um tipo que descreve "qualquer coisa que dá para chamar"; Closure é uma classe concreta. Todo Closure é callable, mas nem todo callable é Closure — e é por isso que public callable $cb dá fatal error.

closurescallablefunçõestipos
Ler artigo
18/08/2026 9 min de leitura

Qual a diferença entre && e "and" no PHP (a pegadinha da precedência)

&& e "and" fazem a mesma lógica, mas têm precedência diferente: "and" vem depois do =, então $x = true and false guarda true em $x. Veja onde a pegadinha morde (só na atribuição), onde não morde, e por que essa precedência baixa existe de propósito.

operadoresprecedêncialógicasintaxe
Ler
14/08/2026 9 min de leitura

isset() vs empty() vs is_null() no PHP: qual usar e quando

isset pergunta se existe e não é null; empty pergunta se o valor é "falsy"; is_null pergunta se é exatamente null. Veja a tabela completa com '', '0', 0 e [] — e por que empty('0') é true derruba formulários todo dia.

issetemptynullvalidaçãotipos
Ler
10/08/2026 10 min de leitura

504 Gateway Timeout no PHP-FPM: qual dos três timeouts é o seu

Três relógios independentes correm ao mesmo tempo — max_execution_time (PHP), request_terminate_timeout (FPM) e fastcgi_read_timeout (nginx) — e vence o menor. Descubra qual disparou pela mensagem que cada um deixa, e por que aumentar só um nunca resolve.

php-fpmservidortimeoutnginxprodução
Ler
07/08/2026 9 min de leitura

Passagem por valor vs por referência no PHP: o que o & faz

Por padrão o PHP entrega uma cópia do valor para a função; com & você entrega a própria variável. Entenda por que arrays também são copiados, por que objetos parecem referência mas não são, e quando o & atrapalha mais do que ajuda.

referênciasfunçõesarraysobjetosmemória
Ler
03/08/2026 10 min de leitura

strlen vs mb_strlen no PHP: por que contar caracteres com acento dá errado

strlen('ação') devolve 6, não 4 — porque conta bytes, e em UTF-8 cada acento ocupa dois. Veja por que o corte com substr gera �, quais funções têm par mb_*, e quando strlen ainda é a escolha certa.

stringsutf-8mbstringacentuaçãovalidação
Ler
30/07/2026 10 min de leitura

'server reached pm.max_children setting' no PHP-FPM: o que isso significa e como calcular o número certo

O aviso significa que todos os workers ficaram ocupados e as requisições entraram na fila. Mas "consider raising it" é um conselho perigoso: o número certo sai da RAM disponível dividida pela memória por worker — aumentar no chute leva o servidor a swap e piora tudo.

php-fpmservidorperformancememóriaprodução
Ler
29/07/2026 8 min de leitura

Por que session_start() dá "headers already sent" no PHP

A sessão viaja num cabeçalho HTTP, e cabeçalho só existe antes do corpo da resposta. Qualquer saída antes — echo, HTML, um espaço ou BOM antes da tag de abertura — fecha os headers e a sessão não inicia. Veja como achar a linha culpada e corrigir de vez.

sessãocookiesheadershttpdepuração
Ler
27/07/2026 7 min de leitura

require vs require_once no PHP: quando o _once realmente importa

require executa o arquivo toda vez que é chamado; require_once garante que ele entre só uma vez. É isso que evita o "Cannot redeclare function/class" quando o mesmo arquivo é puxado por vários caminhos. Veja o mecanismo, quando cada um se aplica e por que o autoload aposentou os includes manuais.

requireincludeautoloadcomposerestrutura
Ler