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

1voto

Funciones para asistir la seralización y deserialización de objetos en PHP

Tengo la siguiente clase para manejar conexión a la base de datos:

class BD {
    protected $link;
    private $server, $username, $password, $db;    
    public function __construct($server, $username, $password) {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->db = $db;
        $this->connect();
    }
    function connect() {
        $this->link = mysql_connect($this->server, $this->username, $this->password);
    }            
}    
$bd = new BD('localhost','root','password');

Luego de serializar el objeto $bd para guardarlo, ¿cómo puedo restaurar la conexión a la base de datos automáticamente?

2 Respuestas

1voto

Leonardo-Tadei Puntos227320

Hola,

el que planteás es un escenario raro, ya que la idea de la serialización es poder transportar un Objeto por la red o almacenarlo al terminar el script para restaurarlo más tarde, con lo que hacerlo para la conexión, sin saber el uso que le darás, me parece raro.

Para hacer esto tenés que usar el método mágico __wakeup(), que si existe, se invoca automáticamente al hacer unserialize() a un objeto.

Sería así:

class BD {
    protected $link;
    private $server, $username, $password, $db;    
    public function __construct($server, $username, $password) {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->db = $db;
        $this->connect();
    }
    function connect() {
        $this->link = mysql_connect($this->server, $this->username, $this->password);
    }
    // Este método se llama automáticamente al hacer unserialize(), dentro de él volvés a hacer la conexión.
    public function __wakeup() {
        $this->connect();
    } 
}   

Acá hay información sobre los métodos mágicos: http://php.net/manual/en/language.oop5.magic.php . Tal vez también tengas que hacer alguna acción al serializar al Objeto, como por ejemplo cerrar las cenexiones a la DB.

Igualmente, te sugiero que dejes de usar las funciones mysql* ya que vana desaparecer en próximas versiones de PHP y pases a usar mysqli* o mejor aun, las PDO.

Acá sobre PDO: http://php.net/manual/en/book.pdo.php

0voto

juaniquillo Puntos1730

En vez de hacer un serialize del objeto (algo que, si usas OOP, no creo que necesario) yo prefiero usar el "Singleton Pattern" para tener la conexión disponible en el momento que la necesite:

http://stackoverflow.com/questions/7968154/singleton-pattern-in-php

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