metodo - public static php
¿Cómo puedo resolver que "el método no estático xxx: xxx() no debería llamarse estáticamente en PHP 5.4? (4)
Actualmente utilizando una gran plataforma en PHP.
El servidor en el que está alojado se ha actualizado recientemente a PHP 5.4.
Desde entonces, he recibido muchos mensajes de error como:
[Sábado 26 de mayo 19:04:41 2012] [error] Estándares estrictos de PHP: el método no estático Config :: getData () no debe llamarse de forma estática, asumiendo $ esto del contexto incompatible en /xxx/Config.inc.php linea 35
El método de ejemplo se define como (tenga en cuenta la falta de palabra clave ''estática''):
function &getData() {
$configData =& Registry::get(''configData'', true, null);
if ($configData === null) {
// Load configuration data only once per request, implicitly
// sets config data by ref in the registry.
$configData = Config::reloadData();
}
return $configData;
}
Esto no ha causado un problema anteriormente y asumo que los mensajes de error (que causan que la aplicación se bloquee) pueden estar relacionados con la actualización reciente a PHP5.4.
¿Hay alguna configuración de PHP que pueda modificar para "ignorar" la falta de palabras clave estáticas?
Deshabilitar el mensaje de alerta no es una forma de resolver el problema. A pesar de que el núcleo de PHP es continuar trabajando, hace suposiciones y acciones peligrosas.
Nunca ignore el error donde PHP debería hacer una suposición de algo !!!!
Si la clase organizada como un singleton siempre puede usar la función getInstance () y luego usar getData ()
Likse:
$classObj = MyClass::getInstance();
$classObj->getData();
Si la clase no es un singleton, use
$classObj = new MyClass();
$classObj->getData();
No te sugiero que simplemente ocultes los errores estrictos en tu proyecto. Intead, debe convertir su método en estático o intentar crear una nueva instancia del objeto:
$var = new YourClass();
$var->method();
También puede usar la nueva forma de hacer lo mismo desde PHP 5.4:
(new YourClass)->method();
¡Espero que te ayude!
Puede eliminar E_STRICT
de error_reporting()
, o simplemente puede hacer su método estático, si necesita llamarlo estáticamente. Por lo que sé, no hay una forma (estricta) de tener un método que pueda invocarse como método estático y no estático. Además, lo que es más molesto, no puede tener dos métodos con el mismo nombre, uno estático y el otro no estático.
Resolví esto con una línea de código, como sigue: En el archivo index.php, en la raíz de su plantilla, después de esta línea de código:
definido (''_JEXEC'') o die (''acceso restringido'');
pegue esta línea: ini_set (''display_errors'', ''Off'');
No te preocupes, sé feliz ...
Publicado por Jenio.