Что это значит? "Ошибка разбора: синтаксическая ошибка, неожиданный 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;
}
}
Не знаю, почему это не работает / что означает ошибка...
7 ответов
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 не статичным
Если вам все еще нужно использовать двойное двоеточие, убедитесь, что вы используете PHP 5.3+
Ошибка связана с "нецелевым использованием" оператора с двойным двоеточием:
return $cnf::getConfig($key);
как с помощью ::
Вы пытаетесь вызвать статический метод самого класса. В вашем примере вы хотите вызвать нестатический метод для экземпляра объекта.
Я думаю, что вы хотите, это:
return $cnf->getConfig($key);
Согласно википедии, это означает оператор разрешения области видимости "двойное двоеточие".
Для всех, кто использует Laravel. У меня была такая же ошибка на Laravel 7.0. Ошибка выглядела так
syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), expecting ';' or ','
Это было в моем файле Routes\web.php, который выглядел так
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
use // this was an extra **use** statement that gave me the error
Route::get('/', function () {
return view('save-online.index');
})->name('save-online.index');