Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Leguim en 11 Febrero 2020, 05:37 am



Título: [Resuelto] [Pregunta]: Deprecated Non-static method users
Publicado por: Leguim en 11 Febrero 2020, 05:37 am
Investigue un poco sobre el tema y esto vendría a ser solamente una advertencia, no un error como tal... digamos que una parte de mi código es este:

Deprecated
: Non-static method users::Add() should not be called statically in


Código
  1. class users
  2. {
  3.      function Add($parametro_1, $parametro_2, $etc)
  4.     {
  5.         // [Consulta SQL para agregar un usuario]
  6.     }
  7. }
  8.  

y el uso sería
Código
  1. users::Add($x, $y, $z); // agrega un usuario a la base de datos
  2.  

No está mal pero según lo que indica la advertencia esto es obsoleto, mi pregunta es por qué? en que cambia el que sea algo estático (que la verdad tampoco se mucho de esto) pero mi tema va más que nada para saber porque debo hacer esto estático... cual es la diferencia o que ventaja trae?

EDIT: Ya lo pude solucionar, por lo menos ya la advertencia no aparece.

Código
  1. $object = new users;
  2. $object->Add($x, $y, $z);
  3.  

Igualmente dejo esto abierto por si alguien quiere darme más información.


Mod: Temas sobre PHP van al subforo de PHP.


Título: Re: [Pregunta]: Deprecated Non-static method users
Publicado por: MinusFour en 11 Febrero 2020, 13:11 pm
Un método estático no tiene referencia a un objeto en particular. La advertencia está ahí porque métodos públicos generalmente hacen referencia a su instancia a través de $this (la instancia del objeto). Imagina que tienes una clase Caja que tiene una sola variable para sus contenidos y dos metodos que ingresan contenidos y extraen contenidos. Tu puedes agarrar una caja entre un montón de cajas y decir:

Código
  1. $cajas[1]->extraer();

o

Código
  1. $cajas[359]->ingresar($otroContenidoOCaja);

Si tú haces:

Código
  1. Caja::extraer()

No hay ninguna referencia a alguna instancia de alguna caja. Por lo tanto el código muy probablemente falle.


Título: Re: [Pregunta]: Deprecated Non-static method users
Publicado por: Leguim en 11 Febrero 2020, 16:04 pm
Gracias, me quedo un poco más claro.


Título: Re: [Pregunta]: Deprecated Non-static method users
Publicado por: EdePC en 12 Febrero 2020, 01:47 am
- Los atributos y métodos estáticos tienes sus usos. Si ves que los necesitas tienes que especificarlo en tu código tal como dice el mensaje de Advertencia:

-- Con advertencia:

Código
  1. <?php
  2.  
  3.  class User {
  4.    function saludar($param_1) {
  5.      echo "Hola, soy $param_1";
  6.    }
  7.  }
  8.  
  9.  User::saludar("Miguel");
  10.  
  11. ?>

Citar
Deprecated: Non-static method User::saludar() should not be called statically in D:\SFT\UniServerZ\www\index.php on line 9
Hola, soy Miguel


-- Sin advertencia:

Código
  1. <?php
  2.  
  3.  class User {
  4.    static function saludar($param_1) {
  5.      echo "Hola, soy $param_1";
  6.    }
  7.  }
  8.  
  9.  User::saludar("Miguel");
  10.  
  11. ?>

Citar
Hola, soy Miguel

- Los Atributos y Métodos estáticos sirven para poder acceder a ellos sin tener que crear una Instancia de Clase, dependerá de tus necesidades el utilizarlas o no. También se utilizan y sirven en Clases Instanciadas si van a tener una utilizad especial como guardar constantes (PI), semiconstantes (cadenas de conexión), etc.


Título: Re: [Pregunta]: Deprecated Non-static method users
Publicado por: Leguim en 13 Febrero 2020, 02:07 am
Gracias!!!!!