65 votes

Qu'est-ce que ça veut dire? "Erreur d'analyse: erreur de syntaxe, T_PAAMAYIM_NEKUDOTAYIM inattendu"

T_PAAMAYIM_NEKUDOTAYIM a l'air vraiment exotique, mais c'est absolument absurde pour moi. J'ai tout tracé jusqu'à ces lignes de code:

 <?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();
    }
}
?>
 

Dans le constructeur, je crée un objet Config. Voici la classe:

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

Aucune idée pourquoi cela ne fonctionne pas / ce que l'erreur signifie ...

72voto

benlumley Points 8114

T_PAAMAYIM_NEKUDOTAYIM est la solution de résolution de double virgule utilisée par PHP - ::

Un rapide coup d'œil sur votre code, je pense que cette ligne:

 return $cnf::getConfig($key);
 

devrait être

 return $cnf->getConfig($key);
 

La première est la façon d'appeler une méthode de manière statique - ce code serait valide si $ cnf contenait une chaîne qui était aussi une classe valide. La syntaxe -> sert à appeler une méthode sur une instance de classe / objet.

11voto

tomasofen Points 443

Juste mes deux cents pour les futurs visiteurs qui ont ce problème.

C'est la bonne sintax pour PHP 5.3, par exemple si vous appelez la méthode statique de la classe nom:

MyClassName::getConfig($key);

Si vous avez déjà attribuer le nom de Classe de l' $cnf variable, vous pouvez appeler la méthode statique (nous parlons de PHP 5.3):

$cnf = MyClassName;
$cnf::getConfig($key);

Cependant, cette sintax ne fonctionne pas sur PHP 5.2 ou moins, et vous devez utiliser la syntaxe suivante:

$cnf = MyClassName;
call_user_func(array($cnf, "getConfig", $key, ...otherposibleadditionalparameters... ));

Espérons que cela aide les gens à avoir cette erreur dans la version 5.2 (ne sais pas si cela a été openfrog de la version).

2voto

richsage Points 12266

L'erreur est due à une "utilisation inappropriée" de l'opérateur double-colon:

 return $cnf::getConfig($key);
 

comme vous essayez d'appeler une méthode statique de la classe, mais utilisez plutôt une instanciation (quelqu'un d'autre le dira sans doute mieux, je suis fatigué ;-))

Je pense que ce que tu veux c'est:

 return $cnf->getConfig($key);
 

2voto

Justin T. Watts Points 130

si vous devez toujours utiliser le double-colon, assurez-vous que vous utilisez PHP 5.3+

1voto

Paul Tomblin Points 83687

Selon Wikipédia, cela signifie un opérateur de résolution de champ "double-points".

http://en.wikipedia.org/wiki/Scope%5Fresolution%5Foperator

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X