PHP expects T_PAAMAYIM_NEKUDOTAYIM?

PhpRuntime ErrorSyntax ErrorError Code

Php Problem Overview


Does anyone have a T_PAAMAYIM_NEKUDOTAYIM?

Php Solutions


Solution 1 - Php

It’s the double colon operator :: (see list of parser tokens).

Solution 2 - Php

It's Hebrew for "double colon".

Solution 3 - Php

It’s a name for the :: operator in PHP. It literally means "double colon". For some reason they named it in Hebrew. Check your code syntax, and put a :: where appropriate :-)

Solution 4 - Php

From Wikipedia:

> In PHP, the scope resolution operator is also called Paamayim > Nekudotayim (Hebrew: פעמיים נקודתיים‎), which means “double colon” in > Hebrew. > > The name "Paamayim Nekudotayim" was introduced in the > Israeli-developed Zend Engine 0.5 used in PHP 3. Although it has been > confusing to many developers who do not speak Hebrew, it is still > being used in PHP 5, as in this sample error message: > > $ php -r :: Parse error: syntax error, unexpected > T_PAAMAYIM_NEKUDOTAYIM > > As of PHP 5.4, error messages concerning the scope resolution operator > still include this name, but have clarified its meaning somewhat: > > $ php -r :: Parse error: syntax error, unexpected '::' > (T_PAAMAYIM_NEKUDOTAYIM)

From the official PHP documentation:

> The Scope Resolution Operator (also called Paamayim Nekudotayim) or in > simpler terms, the double colon, is a token that allows access to > static, constant, and overridden properties or methods of a class. > > When referencing these items from outside the class definition, use > the name of the class. > > As of PHP 5.3.0, it's possible to reference the class using a > variable. The variable's value can not be a keyword (e.g. self, parent > and static). > > Paamayim Nekudotayim would, at first, seem like a strange choice for > naming a double-colon. However, while writing the Zend Engine 0.5 > (which powers PHP 3), that's what the Zend team decided to call it. It > actually does mean double-colon - in Hebrew!

Solution 5 - Php

I know Hebrew pretty well, so to clarify the name "Paamayim Nekudotayim" for you, the paraphrased meaning is "double colon", but translated literally:

  • "Paamayim" means "two" or "twice"
  • "Nekudotayim" means "dots" (lit. "holes")
    • In the Hebrew language, a nekuda means a dot.
    • The plural is nekudot, i.e, dots, which function as vowels
    • The reason it why it's called Nekudo-tayim is because the suffix "-ayim" also means "two" or "twice", thus :: denotes "two times, two dots", or more commonly known as the Scope Resolution Operator.

Solution 6 - Php

This is also coming when you apply a constant in PHP to the empty() function:

if (!empty(SOME_CONSTANT)) {

}

That was my case. I solved it by using this:

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

}

Solution 7 - Php

This can happen on foreachs when using:

foreach( $array as $key = $value )

instead of

foreach( $array as $key => $value )

Solution 8 - Php

Edit: Unfortunately, as of PHP 8.0, the answer is not "No, not anymore". This RFC was not accepted as I hoped, proposing to change T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON; but it was declined.

Note: I keep this answer for historical purposes. Actually, because of the creation of the RFC and the votes ratio at some point, I created this answer. Also, I keep this for hoping it to be accepted in the near future.

Solution 9 - Php

For me this happened within a class function.

In PHP 5.3 and above $this::$defaults worked fine; when I swapped the code into a server that for whatever reason had a lower version number it threw this error.

The solution, in my case, was to use the keyword self instead of $this:

self::$defaults works just fine.

Solution 10 - Php

This just happened to me in a string assignment using double quotes. I was missing a closing curly on a POST variable...

"for {$_POST['txtName'] on $date";

should have been

"for {$_POST['txtName']} on $date";

I can't explain why. I mean, I see the error that would break the code but I don't see why it references a class error.

Solution 11 - Php

This just happened to me in a foreach loop. I had inadvertently typed ($array as $key as $value) and PHP objected to the first as.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPeter TurnerView Question on Stackoverflow
Solution 1 - PhpGumboView Answer on Stackoverflow
Solution 2 - PhppatricksweeneyView Answer on Stackoverflow
Solution 3 - PhpIlya BirmanView Answer on Stackoverflow
Solution 4 - PhpJohn SlegersView Answer on Stackoverflow
Solution 5 - PhpSapphire_BrickView Answer on Stackoverflow
Solution 6 - PhpHarmanView Answer on Stackoverflow
Solution 7 - PhpGDYView Answer on Stackoverflow
Solution 8 - PhpMAChitgarhaView Answer on Stackoverflow
Solution 9 - PhpbozdozView Answer on Stackoverflow
Solution 10 - PhpMark CicchettiView Answer on Stackoverflow
Solution 11 - PhpThomas MurphyView Answer on Stackoverflow