[Resuelto] [Pregunta]: Deprecated Non-static method users

Iniciado por Leguim, 11 Febrero 2020, 05:37 AM

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

Leguim

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 (php) [Seleccionar]

class users
{
     function Add($parametro_1, $parametro_2, $etc)
    {
        // [Consulta SQL para agregar un usuario]
    }
}


y el uso sería
Código (php) [Seleccionar]

users::Add($x, $y, $z); // agrega un usuario a la base de datos


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 (php) [Seleccionar]

$object = new users;
$object->Add($x, $y, $z);


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


Mod: Temas sobre PHP van al subforo de PHP.

MinusFour

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 (php) [Seleccionar]
$cajas[1]->extraer();

o

Código (php) [Seleccionar]
$cajas[359]->ingresar($otroContenidoOCaja);

Si tú haces:

Código (php) [Seleccionar]
Caja::extraer()

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

Leguim


EdePC

- 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 (php-brief) [Seleccionar]
<?php

  
class User {
    function 
saludar($param_1) {
      echo 
"Hola, soy $param_1";
    }
  }

  
User::saludar("Miguel");

?>


CitarDeprecated: 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 (php-brief) [Seleccionar]
<?php

  
class User {
    static function 
saludar($param_1) {
      echo 
"Hola, soy $param_1";
    }
  }

  
User::saludar("Miguel");

?>


CitarHola, 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.