这是什么意思? “解析错误:语法错误,意外T_PAAMAYIM_NEKUDOTAYIM”

时间:2009-12-27 14:02:50

标签: php

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

不知道为什么这不起作用/错误意味着什么...

8 个答案:

答案 0 :(得分:63)

T_PAAMAYIM_NEKUDOTAYIM是PHP使用的双冒号范围解析 - ::

快速浏览一下您的代码,我想这一行:

return $cnf::getConfig($key);

应该是

return $cnf->getConfig($key);

第一种是静态调用方法的方法 - 如果$ cnf包含一个也是有效类的字符串,则此代码有效。 - &gt;语法用于在类/对象的实例上调用方法。

答案 1 :(得分:11)

对于遇到此问题的未来访客,我只需支付两美分。

这是PHP 5.3的正确语法,例如,如果从类名称中调用静态方法:

MyClassName::getConfig($key);

如果您以前将ClassName分配给$ 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的版本)。

答案 2 :(得分:2)

错误归结为双冒号运算符的“不当使用”:

return $cnf::getConfig($key);

通过使用你试图调用类本身的静态方法的::。在您的示例中,您希望在实例化对象上调用非静态方法。

我认为你想要的是:

return $cnf->getConfig($key);

答案 3 :(得分:2)

在你的例子中

return $cnf::getConfig($key)

可能应该是:

return $cnf->getConfig($key)

并使getConfig不是静态的

答案 4 :(得分:2)

如果你仍然需要使用双冒号,请确保你的PHP 5.3 +

答案 5 :(得分:1)

根据维基百科,它意味着“双冒号”范围解析运算符。

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

答案 6 :(得分:1)

这是::运算符的名称

Wikipedia

答案 7 :(得分:0)

适用于使用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');