Что это значит? "Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный 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();
}
}
?>
в конструкторе я создаю объект конфигурации. Вот класс:
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;
}
}
не знаю, почему это не работает / что означает ошибка...
7 ответов:
T_PAAMAYIM_NEKUDOTAYIM-это разрешение области двойного двоеточия, которое использует PHP -::
быстрый взгляд на ваш код, я думаю эта строка:
return $cnf::getConfig($key);должно быть
return $cnf->getConfig($key);первый способ вызвать метод статически-этот код был бы допустим, если бы $cnf содержал строку, которая также была допустимым классом. В -> синтаксис для вызова метода на экземпляре класса/объекта.
только мои два цента для будущих посетителей, у которых есть эта проблема.
Это правильный синтаксис для PHP 5.3, например, если вы вызываете статический метод с именем класса:
MyClassName::getConfig($key);если ранее присвоить имя класса переменной $cnf, то из нее можно вызвать статический метод (речь идет о 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 не статический!--3-->
ошибка сводится к "неуместному использованию" оператора двойного двоеточия:
return $cnf::getConfig($key);как с помощью
::вы пытаетесь вызвать статический метод самого класса. В вашем примере вы хотите вызвать нестатический метод для экземпляра объекта.Я думаю, что вы хотите:
return $cnf->getConfig($key);
Comments