variable metodo php static-methods

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.