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 ...
De acuerdo con wikipedia, significa un operador de resolución de alcance de "doble colón".
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
Es el nombre para el operador ::
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