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