Erro T_PAAMAYIM_NEKUDOTAYIM no PHP: o que é e como corrigir

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

Encontrou o erro misterioso T_PAAMAYIM_NEKUDOTAYIM? Não entre em pânico!

\n\n

Se 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).

\n\n

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

O que é T_PAAMAYIM_NEKUDOTAYIM?

\n\n

No PHP, existe um operador especial :: (dois pontos duplos). Ele é usado para acessar propriedades estáticas, métodos e constantes de uma classe. Exemplo:

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

Tudo 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).

\n\n

5 causas mais comuns do erro

\n\n

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

1. Uso de :: com um objeto em vez de uma classe

\n\n

O erro mais comum entre iniciantes é tentar chamar um método estático através de um objeto usando :: em vez de ->.

\n\n

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

Correto:

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

Lembre-se da regra: para métodos e propriedades estáticas, use :: com o nome da classe; para métodos comuns, use -> com o objeto.

\n\n

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.

\n\n

Exemplo de erro:

\n
<?php\necho AlgumaClasse::fazerAlgo(); // Fatal error: Class 'AlgumaClasse' not found\n?>\n
\n\n

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

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

Soluçã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\n

4. Esquecer o ponto e vírgula ou fechar chaves incorretamente

\n\n

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

\n\n

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

Correção: revise a sintaxe ao redor do erro. Use um editor de código com realce de sintaxe para identificar problemas rapidamente.

\n\n

5. Uso de :: em expressões que não são classes

\n\n

O operador :: só funciona com classes. Tentar usá-lo com funções, arrays ou outros tipos de dados causa o erro.

\n\n

Exemplo incorreto:

\n
<?php\n$numeros = [1, 2, 3];\necho $numeros::count(); // Erro! Array não é uma classe\n?>\n
\n\n

Solução: use a função count($numeros) diretamente.

\n\n

Como depurar esse erro rapidamente

\n\n

Se você está com pressa, siga este checklist:

\n
    \n
  1. Leia a linha do erro no PHP — ela indica onde o :: inesperado está.
  2. \n
  3. Verifique se o que vem antes de :: é um nome de classe válido (e não um objeto, número ou variável incorreta).
  4. \n
  5. Confirme se a classe existe e está no escopo atual.
  6. \n
  7. Revise a sintaxe ao redor: faltou um ponto e vírgula? Uma chave foi fechada cedo demais?
  8. \n
  9. Use var_dump($variavel) para inspecionar o que está antes de ::.
  10. \n
\n\n

Conclusão

\n\n

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

\n\n

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!

Blogs

Book Recommendations