Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/08/2009, 00:16
Avatar de juanca2626
juanca2626
 
Fecha de Ingreso: junio-2004
Ubicación: Lima-Peru
Mensajes: 67
Antigüedad: 20 años, 9 meses
Puntos: 0
Respuesta: Ayuda con Ejemplos POO

gracias snaft_j1 por responder.

No ubiece conocido el uso de las clases abstractas, si no lo ubieces usado aqui para ilustrarme tu codigo :).

Te expondo mis dudas.

1 - Al definir 4 metodos abstractos: DeleteCommand,InsertCommand,SelectCommand,UpdateCo mmand. estamos obligando a que todas las clases que extiendan de la clase abstracta DbProvider definan estos 4 metodos no ??.

2 - Como seria el mejor uso para DbConnect ?. se que este metodo seran usados por todas las demas clases hijas y que no se nesecitaran cambiarla. tu me pones que le mande como parametros los datos de conexion. entonces mas o menos podria ser algo asi.

Código PHP:

    
public function DbConnect$server $user $pass $bd  ) {
        
$handle mysql_connect($server,$user,$pass);
        if(
$handle)
           
$ok mysql_select_db($bd,$handle);
        if(!
$ok)
            return 
false;
        else
            return 
$handle;
    } 
Trabajemos con la clase Cliente que tendria por ejemplo 4 campos basicos.
Id , Nombres, Apellidos, Email. y queramos implementar SelectCommand. haber si mas o menos entiendo. lo aria asi.


Código PHP:

 
class Cliente extends DbProvider 
 
    private 
$id;
    private 
$nombres;
    private 
$apellidos;
    private 
$email;
    private 
$registro = Array();

    public function 
setId($id){
        
$this->id $id;
    }
    public function  
DeleteCommand(){
    }
    public function  
InsertCommand(){
    }
    public function  
UpdateCommand(){
    }
    public function  
SelectCommand(){

       
$sql="select * from cliente where id_cliente=".$this->id;
       
$tb mysql_query($sql);
       if (
$tb){
           
$row mysql_fetch_array($tbMYSQL_ASSOC);
           
$this->registro $row;
       }
    }
    public function 
getRegistro(){
        return 
$this->registro;
    }
 }


 
$claseCliente = new Cliente;
 
$claseCliente->DbConnect('localhost','root','','bdPrueba');
 
$claseCliente->setId('83');
 
$claseCliente->SelectCommand();
 
 echo 
"<pre>";
        
print_r($claseCliente->getRegistro());
 echo 
"</pre>"

de este modo en todas las clases que instanciaria tendria que estar pasandole los datos de coneccion, esto seria un modo nose redundante diria yo. otra que lee visto es usar el contructor, que ahora esta en blanco y poner algo como esto.

Código PHP:
    public function __construct() {
        
$this->DbConnect('localhost','root','','bdPrueba');
    } 
con esto cada ves que instancio una clase extendida automaticamente ejecutaria el metodo DbConnect y no tendria que estar pasandole los datos de conexion en cada instancia.

un problema que tube aqui fue. al declarar el construct como protected , me tira un error que no entiendo.

Fatal error: Call to protected DbProvider::__construct() from invalid context in C:\xampp\webdav\phpPOO\ejemploMantenimientos.php on line 100

Bueno, me gustaria tu opinion de como lo llevo hasta aqui. y si tienes una aclaracion me gustaria leerla para ver donde esta mi error.

desde ya te agradesco el interes por ayudarme a entender como es el uso de la POO.


Gracias.