Что это значит? "Ошибка анализа: синтаксическая ошибка, неожиданный 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(); } } ?> 

В конструкторе я создаю объект Config. Вот класс:

 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; } } 

Не знаю, почему это не работает / что означает ошибка …

Related of "Что это значит? "Ошибка анализа: синтаксическая ошибка, неожиданный T_PAAMAYIM_NEKUDOTAYIM""

T_PAAMAYIM_NEKUDOTAYIM – это разрешающая способность для двойной области видимости, используемая PHP – ::

Быстро взглянув на ваш код, я думаю, что эта строка:

 return $cnf::getConfig($key); 

должно быть

 return $cnf->getConfig($key); 

Первый способ вызова метода статически – этот код будет действителен, если $ cnf содержит строку, которая также была допустимым классом. Синтаксис -> предназначен для вызова метода в экземпляре класса / объекта.

Только мои два цента для будущих посетителей, у которых есть эта проблема.

Это правильный синтаксис для PHP 5.3, например, если вы вызываете статический метод из имени класса:

 MyClassName::getConfig($key); 

Если вы ранее назначали ClassName переменной $ cnf, вы можете вызвать из нее статический метод (мы говорим о PHP 5.3):

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

Однако этот синтаксис не работает на 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); 

Согласно wikipedia, это означает оператор двойной разрешающей способности «двойной толстой кишки».

http://en.wikipedia.org/wiki/Scope_resolution_operator

Это имя для оператора ::

Википедия

если вам все равно нужно использовать двойную двоеточие, убедитесь, что вы на PHP 5.3+