artigos
PHP a fundo, um artigo de cada vez.
Guias e artigos para estudar PHP a fundo — do manual oficial para a prática.
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.
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.
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.
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.
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.
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.
'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.
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.
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.