19. Conexión a MySQL con clase abstracta PHP

En este capítulo vamos a crear un modelo abstracto general, el modelo padre que nos permitirá la conexión a la base de datos MySQL. El paradigma que estamos utilizando es el POO, por lo que no vamos a utilizar programación estructurada ni funcional, que también disponemos en PHP.

Vamos a crear una clase abstracta que permite conectarnos y ejecutar queries a nuestra base de datos. Vamos a crear un archivo denominado Model.php. Como vemos, el archivo comienza en MAY ya que vamos a trabajar con clases, por lo que el formato de sintaxis es CamelCase.

Hay que recordar de capítulos anteriores, que las clases abstractas pueden tener métodos abstractos, que significa que son métodos que las clases que hereden de esta clase las van a heredar y se van a implementar en esas clases hijas. En nuestra clase abstracta se definen sólo los nombres de esos métodos.

La sintaxis de nuestro archivo Model.php será la siguiente.

Ejm

<?php
abstract class Model {
    // Atributos
    private static $db_host = 'localhost';
    private static $db_user = 'root';
    private static $db_passwd = 'root';
    protected $db_name;
    private static $db_charset = 'utf8';
    private $conn;
    protected $query;
    protected $rows = array();

    // Métodos abstractos para CRUD de clases que hereden
    abstract protected function create();
    abstract protected function read();
    abstract protected function update();
    abstract protected function delete();

    // Método privado para conectarse a la base de datos
    private function db_open() {
        $this->conn = new mysqli(
            self::$db_host,
            self::$db_user,
            self::$db_passwd,
            $this->db_name
        );

        $this->conn->set_charset(self::$db_charset);
    }

    // Método privado para desconectarse de la base de datos
    private function db_close() {
        $this->conn->close();
    }

    // Establecer un QUERY simple del tipo INSERT, DELETE, UPDATE
    protected function set_query() {
        $this->db_open();
        $this->conn->query($this->query);
        $this->db_close();
    }

    // Traer resultados de una consulta tipo SELECT en un array
    protected function get_query() {
        $this->db_open();
        $result = $this->conn->query($this->query);
        while( $this->rows[] = $result->fetch_assoc() );
        $result->close();
        $this->db_close();
        return array_pop($this->rows);
    }
}
?>
Scroll al inicio