[Resuelto] [DUDA] Strict Standards

Iniciado por DarK_FirefoX, 16 Marzo 2015, 23:30 PM

0 Miembros y 1 Visitante están viendo este tema.

DarK_FirefoX

Exacto, tengo una duda, pues tengo un script que quiero lograr entender pero me da el siguiente error al cargar la página. Y no se que se está haciendo mal aquí:

Este es el error:

CitarStrict Standards: Non-static method SESmarty::getInstance() should not be called statically in F:\System\Archivos de programa\XAMPP\htdocs\script\header.php on line 35

en esa linea de ese archivo esta el siguiente código:

Código (php) [Seleccionar]
// INITIATE SMARTY
include "include/class_smarty.php";
$smarty =& SESmarty::getInstance();


ahora ese método se llama desde el archivo "class_smarty.php" en el cual tiene este código:

Código (php) [Seleccionar]
class SESmarty extends Smarty
{
//...
//...
//Más código
//..
//..

//Entonces está es la funcion que se está llamando desde el otro archivo

function &getInstance()
{
   static $instance;
   
   if( is_null($instance) )
   {
     $instance = new SESmarty();
   }
   
   return $instance;
}



Espero me puedan ayudar a ver que es lo que pasa porque no tengo ni idea.

Gracias de antemano!

PD: Esto me pasa con muchas llamadas de funciones que tienen más o menos el mismo estilo de llamarlas. ¿Tendré que configurar algo en apache o php?
PD: Tengo instalado XAMPP!!

Usuario Invitado

¿Por qué no está declarada esa función como estática? Debería ser:

Código (php) [Seleccionar]
public static function &getInstance()
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

MinusFour

CitarEspero me puedan ayudar a ver que es lo que pasa porque no tengo ni idea.

Gracias de antemano!

PD: Esto me pasa con muchas llamadas de funciones que tienen más o menos el mismo estilo de llamarlas. ¿Tendré que configurar algo en apache o php?
PD: Tengo instalado XAMPP!!

:: Es un accesor estatico (hay excepciones como con static:: ), para metodos estaticos (metodos que no son llamados desde el contexto del objeto). Como no declaraste el metodo como estatico solo puedes accederlo desde el contexto del objeto:

Código (php) [Seleccionar]

$obj = new SESmarty();
$obj->getInstance();


Veo que es un patron singleton asi que quiero imaginar que de verdad requieres que sea estatico.

DarK_FirefoX

Primero que todo quiero aclarar que este script no lo programé yo, por lo tanto todavía no he revisado todo el código. Voy por partes!

Hice lo que me dijo Gus Garsaky y soluciona el problema, gracias.

Ahora me surge la duda pues este es un script con alrededor de 3000+ archivos php, lo que me cuesta entender es ¿por que lo habrán programado asi? O sea ¿por qué ahora tengo que cambiar muchos de estos métodos a estático?

Podrá ser que ¿en versiones anteriores de PHP, esto era permitido? Pues el script es de hace como 4 años.

Gracias

PD: Iré preguntando en este mismo hilo si me encuentro con algún otro problema, espero puedan seguir ayundandome

MinusFour

Cita de: DarK_FirefoX en 17 Marzo 2015, 02:27 AM
Primero que todo quiero aclarar que este script no lo programé yo, por lo tanto todavía no he revisado todo el código. Voy por partes!

Hice lo que me dijo Gus Garsaky y soluciona el problema, gracias.

Ahora me surge la duda pues este es un script con alrededor de 3000+ archivos php, lo que me cuesta entender es ¿por que lo habrán programado asi? O sea ¿por qué ahora tengo que cambiar muchos de estos métodos a estático?

Podrá ser que ¿en versiones anteriores de PHP, esto era permitido? Pues el script es de hace como 4 años.

Gracias

PD: Iré preguntando en este mismo hilo si me encuentro con algún otro problema, espero puedan seguir ayundandome

Si, parece estar escrito con reglas de OOP de PHP 4.0. No solo usa el :: para acceder a metodos de la clase sin usar static, sino tambien usa los valores por referencia de los objetos. Me imagino porque en PHP 4.0 los objetos se pasaban por valor (y aun se siguen pasando por valor, pero se usan identificadores en lugar de la estructura completa).

DarK_FirefoX

Muchas gracias, era lo que imaginaba tambien. Tengo ahora tambien un problema con uan de las funciones que debe realizar el script, pero no he revisado bien el código de esa página, luego reviso y pregunto si me encuentro con algún problema. Gracias por la ayuda! :)