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); } } ?>