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; } }
Не знаю, почему это не работает / что означает ошибка …
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, это означает оператор двойной разрешающей способности «двойной толстой кишки».
Это имя для оператора ::
Википедия
если вам все равно нужно использовать двойную двоеточие, убедитесь, что вы на PHP 5.3+