tutorial programacion lenguaje descargar caracteristicas php

programacion - php tutorial



¿Qué significa esto? "Error de análisis: error de sintaxis, inesperado T_PAAMAYIM_NEKUDOTAYIM" (7)

T_PAAMAYIM_NEKUDOTAYIM suena muy exótico, pero ciertamente absolutamente absurdo para mí. Lo remonté a estas líneas de código:

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

En el constructor, creo un objeto Config. Aquí está la clase:

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

No tengo idea de por qué esto no funciona / lo que significa el error ...



El error se debe a un "uso inapropiado" del operador doble de dos puntos:

return $cnf::getConfig($key);

como al usar the :: estás intentando llamar a un método estático de la clase en sí. En su ejemplo, desea llamar a un método no estático en un objeto instanciado.

Creo que lo que quieres es:

return $cnf->getConfig($key);


En tu ejemplo

return $cnf::getConfig($key)

Probablemente debería ser:

return $cnf->getConfig($key)

Y hacer getConfig no estático



Solo mis dos centavos para futuros visitantes que tengan este problema.

Esta es la sintaxis correcta para PHP 5.3, por ejemplo, si llamas al método estático del nombre de la clase:

MyClassName::getConfig($key);

Si asignó previamente ClassName a la variable $ cnf, puede llamar al método estático (estamos hablando de PHP 5.3):

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

Sin embargo, este sintax no funciona en PHP 5.2 o menos, y debe usar lo siguiente:

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

Espero que esto ayude a las personas que tienen este error en la versión 5.2 (no sé si esta era la versión de openfrog).


T_PAAMAYIM_NEKUDOTAYIM es la resolución del alcance de dos puntos que usa PHP - ::

Vistazo rápido a su código, creo que esta línea:

return $cnf::getConfig($key);

debiera ser

return $cnf->getConfig($key);

La primera es la manera de llamar a un método estáticamente: este código sería válido si $ cnf contuviera una cadena que también fuera una clase válida. La sintaxis -> es para invocar un método en una instancia de una clase / objeto.


si aún necesita usar el doble punto, asegúrese de tener PHP 5.3 o superior