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


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

412   7  
PHP

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

согласно Википедии, это означает оператор разрешения области "двойной двоеточие".

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

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

Википедия

Если вам все еще нужно использовать двойное двоеточие, то убедитесь, что ваш на PHP 5.3+

Comments

    Ничего не найдено.