entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

Diferencia entre métodos estáticos y de instancia en las clases de PHP

¿Qué está mal con este código? asumiendo que los parámetros de conexión son correctos y la tabla 'usuario' existe:

class DB
{
    protected $bd;
    public function __construct() { $this->bd = mysql_connect('localhost', 'root', '') ; }
    public static function getUsuarios() { return mysql_query("select * from usuario",$this->bd);  }
}

0voto

Peter comentado

Como menciona victor, los métodos estáticos no pueden acceder a variables de instancia:

$this->bd en getUsuarios

1 Respuesta

1voto

juaniquillo Puntos1730

Si intentas llamar getUsuarios de forma estática:

DB::getUsuarios();

Esto causará un error ya que getUsuarios, llamada de forma estática, no tiene acceso a ninguna variable que no sean estáticas o constantes porque no están dentro de un contexto creado por el keyword "new" . Osea, en este caso, no puedes usar "$this".

Lo puedes usar con el siguiente cambio:

class DB
{
    static $bd;
    public static function getUsuarios() {
        if(!self::$bd){
            self::crearDb();
        }
        return mysql_query("select * from usuario",self::$bd);
    }
    public static function crearDb(){
        self::$bd = mysql_connect('localhost', 'root', '') ;
    }
}

PD: Mi intención es sólo demostrar como funcionan los métodos estáticos. No recomiendo que se use está clase. Existen mejores recursos para trabajar con bases de datos: Doctrine, Propel, Redbean...

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta