PHP Conceptos básicos Modelo-Vista-Controlador

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introdución

  • Có que levamos visto ata o de agora xa podemos facer sitios webs en PHP, pero teremos certos problemas 'de mantemento' en caso de que o sitio sexa grande (con grande me refiro a unha cantidade alta de páxinas PHP).
  • Isto é debido a que estamos a 'mesturar' aspectos, como por exemplo as funcións de acceso a datos (conexión e operacións) dentro das páxinas que van 'presentar' ao usuario a información.


  • Imaxinemos como estamos a facer agora que queremos cambiar o acceso á base de datos e no canto de utilizar Mysql queremos usar SQLServer...
Teríamos que ir a todas as páxinas cambiando as funcións de acceso a datos.
  • Por outra banda, imaxinade que temos un equipo de persoas e queremos 'distribuír' o traballo en equipos.
De tal forma que un equipo se encargue de 'maquetar' a información con CSS e HTML e outro que se adique a facer as chamadas á base de datos en busca de dita información.
Esta labor non a poderíamos facer en 'paralelo' xa que a presentación de datos e o acceso aos mesmos se fan dentro da mesma páxina.


Melloras ao feito ata o de agora

  • En primeiro lugar, poderíamos crear unha clase que se encargue da facer a conexión á base de datos e as operacións contra a mesma.
 1 <?php
 2 class Database {
 3 
 4 const SERVIDOR = 'localhost';
 5 const USUARIO = 'user_php';
 6 const PASSWORD = 'user_php';
 7 const BD = 'PHP';
 8 
 9     private static $db;
10     private $conexion;
11 
12     private function __construct() {
13         $this->conexion = new mysqli(SERVIDOR,USUARIO,PASSWORD,BD);
14         $this->conexion->set_charset('utf8');  
15     }
16 
17     function __destruct() {
18         $this->conexion->close();
19     }
20 
21     public static function getConnection() {
22         if (self::$db == null) {
23             self::$db = new Database();
24         }
25         return self::$db->conexion;
26     }
27 
28     public static function consultaDB($consulta) {
29           $result=self::$db->$conexion->query($consulta);
30     }
31 
32 }


           <?php
           include ('Database.php');
           
           $conex = Database::getConnection();
           if ($conex->connect_error){
                die('Erro de Conexión (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
           }
           ?>
            
            
           <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
           <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
               <head>
                   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                   <title>Operacións BD</title>
               </head>
            
               <body>
           <?php        
                  
                   $result=Database::consultaDB(Database::CONSULTAR_LIBROS);
                   if ($result && $result->num_rows>0){

echo "

"; while($row = $result->fetch_assoc()) { echo ''; printf("",$row["titulo"]); echo ''; } echo '
%s

';

                       $result->free();  // Liberamos da memoria os recursos
                   }
                   else {
                       echo "Non hai datos que amosar!!!!";
                   }
                   $conex->close();  // Pechamos a conexión
                  
           ?>        
               </body>    
           </html>







-- Ángel D. Fernández González -- (2016).