Wednesday, January 18, 2017

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



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




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


Answer



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.


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...