这是什么意思? “parsing错误:语法错误,意外的T_PAAMAYIM_NEKUDOTAYIM”
T_PAAMAYIM_NEKUDOTAYIM听起来很奇特,但对我来说绝对是无稽之谈。 我追溯到这些代码行:
<?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(); } } ?>
在构造函数中,我创build了一个Config对象。 这是这个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; } }
不知道为什么这不起作用/错误的意思是…
T_PAAMAYIM_NEKUDOTAYIM是PHP使用的双冒号作用域分辨率 – ::
快速浏览你的代码,我认为这一行:
return $cnf::getConfig($key);
应该
return $cnf->getConfig($key);
第一种是静态调用方法 – 如果$ cnf包含一个也是有效类的string,则该代码将是有效的。 – >语法用于在类/对象的实例上调用方法。
只有我的两分钱给未来的游客谁有这个问题。
这是PHP 5.3的正确语法,例如,如果您从类名称中调用静态方法:
MyClassName::getConfig($key);
如果您以前将ClassName分配给$ cnfvariables,则可以从中调用静态方法(我们正在讨论PHP 5.3):
$cnf = MyClassName; $cnf::getConfig($key);
但是,这个sintax不能在PHP 5.2或更低版本上工作,并且需要使用以下内容:
$cnf = MyClassName; call_user_func(array($cnf, "getConfig", $key, ...otherposibleadditionalparameters... ));
希望这有助于在5.2版本中有这个错误的人(不知道这是否是openfrog的版本)。
在你的例子中
return $cnf::getConfig($key)
可能应该是:
return $cnf->getConfig($key)
并使getConfig不是静态的
该错误归结为双冒号操作符的“不适当使用”:
return $cnf::getConfig($key);
通过使用::
你试图调用类本身的静态方法。 在你的例子中,你想调用一个实例化对象的非静态方法。
我想你想要的是:
return $cnf->getConfig($key);
根据维基百科,这意味着一个“双冒号”范围parsing运算符。
这是::
运算符的名称
维基百科
如果你仍然需要使用双冒号,那么确保你的PHP 5.3+