Ver Mensaje Individual
  #15 (permalink)  
Antiguo 26/08/2010, 16:27
Avatar de _ssx
_ssx
 
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 6 meses
Puntos: 60
Respuesta: lo estoy haciendo bien??

Veo que muchos aqui tratan de empezar a hacer sus "Clases de conexión" no obstante que les parece si hacemos un ejemplo un poco más OOP y mas robusto.

Misión: Crear una conexión con "cualquier base de datos" solo creando los adaptadores necesarios haciendo uso de interfaces.


DbInterface.php
Código PHP:
<?php

interface DbInterface
{
    public function 
conectar();
    public function 
desconectar();
    public function 
ejecutar(SQL $sql);
}
Db.php
Código PHP:
<?php
require_once 'DbInterface.php';
class 
Db
{
    private 
$db;
    
    public function 
__construct(MySQL $db)
    {
        
$this->db $db;
    }
    public function 
conectar()
    {
        
$this->db->conectar();
    }
    public function 
desconectar()
    {
        
$this->db->desconectar();
    }    
    public function 
ejecutar(SQL $sql)
    {
        return 
$this->db->ejecutar($sql);
    }
}
SQL.php

Código PHP:
<?php

class SQL
{
    private 
$consulta;
    private 
$campos = array();
    private 
$tablas = array();
    private 
$wheres = array();
    private 
$orders = array();
    
    public function 
addCampo($campo)
    {
        
$this->campos[] = $campo;
    }
    public function 
addTabla($tabla)
    {
        
$this->tablas[] = $tabla;
    }
    public function 
addWhere($where)
    {
        
$this->wheres[] = $where;
    }
    public function 
addOrder($or)
    {
        
$this->orders[] = $or;
    }
    private function 
make()
    {
        
$this->consulta 'SELECT ';
        foreach(
$this->campos as $campo){
            
$cadenaCampos.= ' '.$campo.', ';
        }
        
$this->consulta.= substr($cadenaCampos,0,strlen($cadenaCampos)-2);
        
$this->consulta.= ' FROM ';
        foreach(
$this->tablas as $tabla){
            
$cadenaTablas.= ' '.$tabla.', ';
        }
        
$this->consulta.= substr($cadenaTablas,0,strlen($cadenaTablas)-2);
        if(
count($this->wheres)!=0){
            
$this->consulta.= ' WHERE ';
            foreach(
$this->wheres as $where){
                
$cadenaWheres.= ''.$where.' AND ';
            }
            
$this->consulta.= substr($cadenaWheres,0,strlen($cadenaWheres)-4);
        }
        if(
count($this->orders)!=0){
            
$this->consulta.= ' ORDER BY ';
            foreach(
$this->orders as $order){
                
$cadenaOrders.= ''.$order.', ';
            }
            
$this->consulta.= substr($cadenaOrders,0,strlen($cadenaOrders)-2);
        }
        return 
$this->consulta;
    }
    public function 
get()
    {
        return 
$this->make();
    }
    public function 
toString()
    {
        return 
$this->make();
    }
}
MySQL.php
Código PHP:
<?php
require_once 'DbInterface.php';

class 
MySql implements DbInterface
{
    private 
$host;
    private 
$user;
    private 
$pass;
    private 
$db;
    private 
$datos = array();
    
    public function 
__construct()
    {
        
$args func_get_args();
        
$this->host $args[0];
        
$this->user $args[1];
        
$this->pass $args[2];
        
$this->db $args[3];
    }
    public function 
conectar()
    {
        
mysql_connect($this->host,$this->user,$this->pass);
        
mysql_select_db($this->db);
    }
    public function 
desconectar()
    {
        
mysql_close();
    }
    public function 
ejecutar(SQL $sql)
    {
        
$consulta mysql_query($sql->get());
        while(
$row mysql_fetch_assoc($consulta)){
            
$datos[] = $row;
        }
        return 
$datos;
    }
}
y bien como se usa todo esto..

index.php

Código PHP:
<?php
require_once 'Db.php';
require_once 
'MySql.php';
require_once 
'SQL.php';
        
//Aqui se le podria enviar cuaqluier tipo de base de datos solo creando un "Adaptador" que implemente la interface DbInterface
    
$db = new Db(new MySql('localhost','root','','password'));
        
$db->conectar();
        
$consulta = new SQL();
        
$consulta->addTabla('clientes');
            
$consulta->addCampo('razon');
            
$consulta->addCampo('nombre');
            
$consulta->addCampo('apellidos');
        
//$consulta->addWhere("nombre = 'Pepito'");
        
$consulta->addOrder("razon DESC");
        
$datos $db->ejecutar($consulta);
        foreach(
$datos as $val){
            echo 
$val['nombre']." ".$val['apellidos']."<br>";
        }
?>


Espero te de una idea más clara de las posibilidades de la OOP
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador