Encontrou o erro misterioso T_PAAMAYIM_NEKUDOTAYIM? Não entre em pânico!
\n\nSe você já programou em PHP e se deparou com uma mensagem de erro como PHP Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), sabe como isso pode ser confuso. Principalmente quando você está começando a aprender a linguagem e se depara com uma palavra estranha em hebraico. Na verdade, por trás desse nome complicado, existe algo simples — o operador de resolução de escopo (Paamayim Nekudotayim significa "dois pontos duplos" em hebraico).
Neste tutorial, vamos entender por que esse erro acontece, como corrigi-lo e como evitá-lo no futuro. O artigo é baseado em uma pergunta real do Stack Overflow que acumulou milhares de visualizações — ou seja, é um problema realmente popular.
\n\nO que é T_PAAMAYIM_NEKUDOTAYIM?
\n\nNo PHP, existe um operador especial :: (dois pontos duplos). Ele é usado para acessar propriedades estáticas, métodos e constantes de uma classe. Exemplo:
<?php\nclass MinhaClasse {\n public static $valor = 42;\n const PI = 3.14;\n \n public static function ola() {\n return "Olá do método estático!";\n }\n}\n\n// Uso correto de ::\necho MinhaClasse::$valor; // Exibe 42\necho MinhaClasse::PI; // Exibe 3.14\necho MinhaClasse::ola(); // Exibe "Olá do método estático!"\n?>\n\n\nTudo simples, até você quebrar a sintaxe. O erro T_PAAMAYIM_NEKUDOTAYIM ocorre quando o PHP encontra :: em um contexto inesperado ou quando antes dele não há uma classe, mas algo diferente (como uma variável).
5 causas mais comuns do erro
\n\nVamos analisar os cenários típicos que levam a esse erro. Cada caso será acompanhado de um exemplo de código e da forma de corrigi-lo.
\n\n1. Uso de :: com um objeto em vez de uma classe
\n\nO erro mais comum entre iniciantes é tentar chamar um método estático através de um objeto usando :: em vez de ->.
Incorreto:
\n<?php\nclass Calculadora {\n public static function somar($a, $b) {\n return $a + $b;\n }\n}\n\n$calc = new Calculadora();\necho $calc::somar(5, 3); // Erro! PHP espera T_PAAMAYIM_NEKUDOTAYIM\n?>\n\n\nCorreto:
\n<?php\necho Calculadora::somar(5, 3); // Chamada através da classe\n// Ou se o método não for estático:\n// echo $calc->somar(5, 3);\n?>\n\n\nLembre-se da regra: para métodos e propriedades estáticas, use :: com o nome da classe; para métodos comuns, use -> com o objeto.
2. Classe ausente ou nome de classe incorreto
\n\nÀs vezes você escreve ::, mas o PHP não encontra a classe porque ela não foi declarada ou você errou o nome.
Exemplo de erro:
\n<?php\necho AlgumaClasse::fazerAlgo(); // Fatal error: Class 'AlgumaClasse' not found\n?>\n\n\nComo corrigir:
\n- \n
- Verifique se a classe foi declarada (ou incluída via
require/include). \n - Confirme se o nome da classe está escrito corretamente. \n
- Se a classe estiver em outro arquivo, verifique o caminho do arquivo. \n
3. Uso de :: com uma variável que não contém uma classe
\n\nÀs vezes, você tenta acessar um método estático através de uma variável, mas ela não contém uma string com o nome da classe, e sim outro tipo de dado.
\n\nCódigo problemático:
\n<?php\nclass Logger {\n public static function log($msg) {\n echo "[LOG] $msg";\n }\n}\n\n$nomeClasse = 123; // Isso é um número, não uma string com o nome da classe\n$nomeClasse::log("Teste"); // Erro!\n?>\n\n\nSolução: sempre verifique se a variável contém um nome de classe válido (uma string).
\n\n<?php\n$nomeClasse = 'Logger';\n$nomeClasse::log("Teste"); // Agora funciona!\n?>\n\n\n4. Esquecer o ponto e vírgula ou fechar chaves incorretamente
\n\nErros de sintaxe simples, como esquecer um ponto e vírgula (;) ou fechar chaves (}) no lugar errado, podem fazer o PHP interpretar o :: de forma inesperada.
Exemplo:
\n<?php\nclass Teste {\n public static function metodo() {\n return "OK";\n }\n} // Faltou o ponto e vírgula aqui?\n\necho Teste::metodo();\n?>\n\n\nCorreção: revise a sintaxe ao redor do erro. Use um editor de código com realce de sintaxe para identificar problemas rapidamente.
\n\n5. Uso de :: em expressões que não são classes
\n\nO operador :: só funciona com classes. Tentar usá-lo com funções, arrays ou outros tipos de dados causa o erro.
Exemplo incorreto:
\n<?php\n$numeros = [1, 2, 3];\necho $numeros::count(); // Erro! Array não é uma classe\n?>\n\n\nSolução: use a função count($numeros) diretamente.
Como depurar esse erro rapidamente
\n\nSe você está com pressa, siga este checklist:
\n- \n
- Leia a linha do erro no PHP — ela indica onde o
::inesperado está. \n - Verifique se o que vem antes de
::é um nome de classe válido (e não um objeto, número ou variável incorreta). \n - Confirme se a classe existe e está no escopo atual. \n
- Revise a sintaxe ao redor: faltou um ponto e vírgula? Uma chave foi fechada cedo demais? \n
- Use
var_dump($variavel)para inspecionar o que está antes de::. \n
Conclusão
\n\nO erro T_PAAMAYIM_NEKUDOTAYIM parece assustador, mas na prática é apenas um problema de sintaxe relacionado ao uso incorreto do operador de resolução de escopo (::). Agora que você entende as causas, corrigi-lo será muito mais fácil.
Continue praticando e, se surgir outra dúvida, lembre-se: a comunidade PHP está cheia de recursos — e o Stack Overflow é sempre um bom amigo!