Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does this mean? "Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM"

Tags:

php

T_PAAMAYIM_NEKUDOTAYIM sounds really exotic, but most certainly absolutely nonsense to me. I traced it all down to this lines of code:

<?php Class Context {     protected $config;      public function getConfig($key) { // Here's the problem somewhere...     $cnf = $this->config;     return $cnf::getConfig($key);     }      function __construct() {     $this->config = new Config();     } } ?> 

In the constructor I create a Config object. Here's the class:

final class Config {     private static $instance = NULL;     private static $config;      public static function getConfig($key) {     return self::$config[$key];     }      public static function getInstance() {     if (!self::$instance) {         self::$instance = new Config();     }     return self::$instance;     }      private function __construct() {     // include configuration file     include __ROOT_INCLUDE_PATH . '/sys/config/config.php'; // defines a $config array     $this->config = $config;     } } 

No idea why this doesnt work / what the error means...

like image 683
openfrog Avatar asked Dec 27 '09 14:12

openfrog


People also ask

What is T_paamayim_nekudotayim?

For those of you who don't know, in PHP T_PAAMAYIM_NEKUDOTAYIM is the token name for :: , the static separator. It's Hebrew for double colon. Both of these have been “fixed” in PHP 5.4, but only partially.

What is parse error syntax error unexpected?

A parse error: syntax error, unexpected appears when the PHP interpreter detects a missing element. Most of the time, it is caused by a missing curly bracket “}”. To solve this, it will require you to scan the entire file to find the source of the error.


2 Answers

T_PAAMAYIM_NEKUDOTAYIM is the double colon scope resolution thingy PHP uses - ::

Quick glance at your code, I think this line:

return $cnf::getConfig($key); 

should be

return $cnf->getConfig($key); 

The first is the way to call a method statically - this code would be valid if $cnf contained a string that was also a valid class. The -> syntax is for calling a method on an instance of a class/object.

like image 140
benlumley Avatar answered Sep 23 '22 20:09

benlumley


Just my two cents for future visitors who have this problem.

This is the correct syntax for PHP 5.3, for example if you call static method from the class name:

MyClassName::getConfig($key); 

If you previously assign the ClassName to the $cnf variable, you can call the static method from it (we are talking about PHP 5.3):

$cnf = MyClassName; $cnf::getConfig($key); 

However, this sintax doesn't work on PHP 5.2 or lower, and you need to use the following:

$cnf = MyClassName; call_user_func(array($cnf, "getConfig", $key, ...otherposibleadditionalparameters... )); 

Hope this helps people having this error in 5.2 version (don't know if this was openfrog's version).

like image 38
tomasofen Avatar answered Sep 25 '22 20:09

tomasofen