O PHP espera T_PAAMAYIM_NEKUDOTAYIM?

543

Alguém tem um T_PAAMAYIM_NEKUDOTAYIM?

Peter Turner
fonte
22
Às vezes, essa é a maneira do PHP dizer que está faltando um sinal de $ ... por exemplo, se você escrever _SESSION ["foo"] em vez de $ _SESSION ["foo"] #
4613 Gonzo
131
hebraico para dois pontos duplos duplos, mas ... veja bugs.php.net/bug.php?id=14492 : "Aliás, há um erro de ortografia no erro de análise, ele deve ser T_PAAMAYIM_NEKUDATAYIM (em hebraico, o 'double' forma é apenas o substantivo original + o sufixo 'ayim' e 'nekuda' é a forma única ['nekudot' é a forma plural]) ".
Wolfgang Fahl
66
@WolfgangFahl Eu sabia que algo sobre esse erro parecia errado.
26612 Peter Turner
14
@WolfgangFahl o erro ortográfico é apenas o que falta u. Deveria ser T_PAAMAYIM_NEKUDOTAYIM. ( PAAMAYIM= "duas vezes", NEKUDOTAYIM= := "םודותיים")
Tom
15
Quando vi esse erro, fiquei olhando a tela estupefato por cerca de 30 segundos, depois caí na gargalhada e fui fumar um cigarro: F 1+
n00b

Respostas:

343

É o operador de dois pontos ::(consulte a lista de tokens do analisador ).

quiabo
fonte
11
Na verdade não. Teste istovar_dump(empty(TRUE))
machineaddict
1
@machineaddict Pergunta / resposta errada?
Gumbo
2
Não. Acabei de adicionar uma avaliação que retorna o mesmo T_PAAMAYIM_NEKUDOTAYIM. Eu encontrei por engano.
precisa
6
@Web_Developer, a razão disso acontece é que, se você tiver foreach($cats as cato único caractere aceitável após a catinstrução for sintaticamente válida, for a ::, pois isso permitirá que você especifique uma propriedade estática de alguma classe chamada cat. Por exemplo, se a catclasse tem um membro estático público chamado $mouse, então foreach($cats as cat::$mouse)é perfeitamente válido php, mas uma instrução com outra coisa que não seja ::a após catseria um erro de sintaxe. Se $mousenão fosse uma propriedade declarada, catvocê receberia um erro fatal, mas ainda não um erro de sintaxe.
ChillNUT
2
var_dump (vazio (TRUE)), basta retornar bool (false) no PHP 7.2
Programmer Dancuk 6/6
109

Google faz maravilhas.

É hebraico para "cólon duplo".

patricksweeney
fonte
3
@MattiVirkkunenQue tal um novo idioma que aceite qualquer erro, confirma, sintaxe em qualquer idioma? :) nós podemos fazer isso.
Hector
2
O Google me trouxe aqui.
Sumit
2
israelis escreveu php :)
sd1sd1 15/07/19
@ sd1sd1, sim, é provavelmente Zeev que escreveu que
peterchaula
53

É um nome para o ::operador em PHP. Literalmente significa "dois pontos duplos". Por alguma razão, eles o nomearam em hebraico. Verifique sua sintaxe de código e coloque um ::onde apropriado :-)

Ilya Birman
fonte
1
As funções estão em inglês, mas esse erro está em hebraico. Não tenho certeza se existem outros erros em hebraico.
alex
19
A sequência de destaque é להדגיש מחרוזת. A partir de agora, apenas usarei minha função personalizada array_push לדחוף_מערך em caracteres hebraicos, é claro. Tenho certeza de que todos os meus colegas que não falam hebraico vão adorar. Quase toda a nossa equipe de desenvolvimento fala pelo menos um idioma escrito em caracteres não latinos. Deve ser divertido :)
Isaac
3
A razão pela qual está em hebraico é porque o código foi escrito por israelenses. Eu não acho que eles perderam esse erro, eles deixaram isso sem tradução como um lembrete.
Raul
5
@Raul Ok, então no meu próximo projeto eu vou escrever um código de erro em italiano, eu sou italiano! O que você espera, inglês em todo lugar? :-)
Gianluca Ghettini
@Ilya Birman Não significa literalmente "cólon duplo"; literalmente significa "duas vezes, pontos duplos" #
Sapphire_Brick
47

Da Wikipedia :

No PHP, o operador de resolução de escopo também é chamado Paamayim Nekudotayim (hebraico: פעמיים נקודתיים), que significa "dois pontos duplos" em hebraico.

O nome "Paamayim Nekudotayim" foi introduzido no Zend Engine 0.5 desenvolvido por Israel, usado no PHP 3. Embora tenha sido confuso para muitos desenvolvedores que não falam hebraico, ele ainda está sendo usado no PHP 5, como nesta mensagem de erro de amostra :

$ php -r :: Erro de análise: erro de sintaxe, inesperado T_PAAMAYIM_NEKUDOTAYIM

No PHP 5.4, as mensagens de erro relativas ao operador de resolução do escopo ainda incluem esse nome, mas esclareceram um pouco o seu significado:

$ php -r :: Erro de análise: erro de sintaxe, '::' inesperado (T_PAAMAYIM_NEKUDOTAYIM)

Da documentação oficial do PHP :

O Operador de resolução de escopo (também chamado Paamayim Nekudotayim) ou, em termos mais simples, dois pontos duplos, é um token que permite o acesso a propriedades ou métodos estáticos, constantes e substituídos de uma classe.

Ao referenciar esses itens de fora da definição de classe, use o nome da classe.

A partir do PHP 5.3.0, é possível referenciar a classe usando uma variável. O valor da variável não pode ser uma palavra-chave (por exemplo, auto, pai e estática).

Paamayim Nekudotayim pareceria, a princípio, uma escolha estranha para nomear dois pontos duplos. No entanto, enquanto escrevia o Zend Engine 0.5 (que usa o PHP 3), foi assim que a equipe do Zend decidiu chamá-lo. Na verdade, significa dois pontos - em hebraico!

John Slegers
fonte
1
Na verdade, é hebraico coloquial. A Wikipedia agora diz: "No PHP, o operador de resolução de escopo também é chamado Paamayim Nekudotayim (hebraico: פעמיים נקודותיים, pronunciado [paʔaˈmajim nəkudoˈtajim]), a segunda palavra uma corrupção coloquial de נקודתיים, que significa [nəkudaˈtajim]) "Em hebraico".
7283 mic
11

Isso também ocorre quando você aplica uma constante no PHP à função empty ():

if (!empty(SOME_CONSTANT)) {

}

Esse foi o meu caso. Eu resolvi usando isso:

$string = SOME_CONSTANT;
if (!empty($string)) {

}
Máx.
fonte
2
Por que uma constante estaria vazia?
Não se apavora o
1
Boa pergunta: Isso é apenas por exemplo, se mais alguém entrou nessa situação de erro, eu apenas mostro que também será possível :) #
Max de
6
@ Não entre em pânico: por que não? empty () não apenas testa se existe uma variável, mas também se seu valor está "vazio" (no caso do PHP, zero (0) também está vazio). Essa constante pode representar um valor que deve ser alterado por um usuário - como configurações de banco de dados ou alguns valores true / false e outros tipos de valor que o desenvolvedor de código não conhece no momento do design. Isso é comum para APIs ou estruturas de código. Eu simplesmente não entendo por que os desenvolvedores do analisador Zend não usaram uma palavra comum que todo mundo conhece e entende, mas algumas palavras hebraicas. Quero dizer, não é nem mesmo engraçado.
StanE 6/03/2015
Uso constantes nos arquivos de configuração e quero saber no código se uma constante específica está vazia (nula, falsa, 0, sequência vazia, matriz emty ....). Devo testar contra todos eles manualmente? WTF
qdev 26/04/19
5

Eu sei hebraico muito bem, então, para esclarecer o nome "Paamayim Nekudotayim" para você, o significado parafraseado é "cólon duplo", mas traduzido literalmente:

  • "Paamayim" significa "dois" ou "duas vezes"
  • "Nekudotayim" significa "pontos" (lit. "buracos")
    • Na língua hebraica, nekuda significa um ponto.
    • O plural é nekudot , isto é, pontos que agem como vogais em inglês.
    • A razão pela qual é chamado Nekudo- tayim é porque o sufixo "-ayim" também significa "dois" ou "duas vezes", mas geralmente significa dois objetos em vez de duas ações, portanto, ::indica "duas vezes, dois pontos" ou mais conhecido como Operador de resolução de escopo .
Sapphire_Brick
fonte
2

Isso pode acontecer no foreachs ao usar:

foreach( $array as $key = $value )

ao invés de

foreach( $array as $key => $value )
GDY
fonte
1

Para mim, isso aconteceu dentro de uma função de classe.

No PHP 5.3 e acima, $this::$defaultsfuncionou bem; quando troquei o código em um servidor que, por qualquer motivo, tivesse um número de versão inferior, gerava esse erro.

A solução, no meu caso, foi usar a palavra-chave em selfvez de $this:

self::$defaults funciona muito bem.

bozdoz
fonte
Ele perguntou sobre o $thisque aconteceu com você ?
Sapphire_Brick