Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: DarK_FirefoX en 16 Marzo 2015, 23:30 pm



Título: [Resuelto] [DUDA] Strict Standards
Publicado por: DarK_FirefoX en 16 Marzo 2015, 23:30 pm
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:

Citar
Strict 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
  1. // INITIATE SMARTY
  2. include "include/class_smarty.php";
  3. $smarty =& SESmarty::getInstance();

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

Código
  1. class SESmarty extends Smarty
  2. {
  3. //...
  4. //...
  5. //Más código
  6. //..
  7. //..
  8.  
  9. //Entonces está es la funcion que se está llamando desde el otro archivo
  10.  
  11. function &getInstance()
  12. {
  13.    static $instance;
  14.  
  15.    if( is_null($instance) )
  16.    {
  17.      $instance = new SESmarty();
  18.    }
  19.  
  20.    return $instance;
  21. }
  22.  
  23.  

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!!


Título: Re: [DUDA] Strict Standards
Publicado por: Usuario Invitado en 16 Marzo 2015, 23:59 pm
¿Por qué no está declarada esa función como estática? Debería ser:

Código
  1. public static function &getInstance()


Título: Re: [DUDA] Strict Standards
Publicado por: MinusFour en 17 Marzo 2015, 00:28 am
Citar
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!!

:: 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
  1. $obj = new SESmarty();
  2. $obj->getInstance();

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


Título: Re: [DUDA] Strict Standards
Publicado por: 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


Título: Re: [DUDA] Strict Standards
Publicado por: MinusFour en 17 Marzo 2015, 02:54 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).


Título: Re: [DUDA] Strict Standards
Publicado por: DarK_FirefoX en 17 Marzo 2015, 04:43 am
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! :)