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
class users
{
function Add($parametro_1, $parametro_2, $etc)
{
// [Consulta SQL para agregar un usuario]
}
}
y el uso sería
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.
$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.
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:
$cajas[1]->extraer();
o
$cajas[359]->ingresar($otroContenidoOCaja);
Si tú haces:
Caja::extraer()
No hay ninguna referencia a alguna instancia de alguna caja. Por lo tanto el código muy probablemente falle.
Gracias, me quedo un poco más claro.
- 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:
<?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:
<?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.
Gracias!!!!!