Foros del Web » Programando para Internet » PHP »

Herencia en php

Estas en el tema de Herencia en php en el foro de PHP en Foros del Web. Saludos Tengo un problema con la herencia de clases, haber si me logro explicar: Tengo una clase de conexion a la base de datos junto ...
  #1 (permalink)  
Antiguo 12/05/2011, 13:48
 
Fecha de Ingreso: febrero-2008
Ubicación: Mexico, D.F.
Mensajes: 23
Antigüedad: 16 años, 2 meses
Puntos: 0
Herencia en php

Saludos

Tengo un problema con la herencia de clases, haber si me logro explicar:

Tengo una clase de conexion a la base de datos junto con algunos metodos para ejecucion de jquerys y otros mas, tambien tengo una clase llamada proyecto que se hereda de la clase de la base de datos y otra clase llamada informe tecnico que hereda de la clase proyecto.

Ahora el problema es que no me ejecuta los metodos de la clase de la base de datos (no ejecuta la consulta)

pongo el codigo para mejor entendimiento

Clase de Base de Datos
Código PHP:
class BD {
    
    
//Datos de la cadena de conexion
    
private $cnx "host=localhost dbname=prueba user=user password=pwd";
    private 
$conn;
    
    const 
ABIERTA 1;
    const 
CERRADA 0;
    
    private 
$status CERRADA;
    
    
/**
    * Constructor
    */    
    
public function __construct(){
        
//Cerramos la conexion que este activa
        
$this->close();
    }
    
    
/**
    * Abre conexion a la base de datos
    */    
    
private function open(){
        
$this->status ABIERTA;
        
$this->conn pg_connect($this->cnx) or die('<b>Error de conexion</b>');
    }
    
    
/**
    * Cierra conexion a la base de datos
    */    
    
private function close(){
        
$this->status CERRADA;
        
pg_close($this->conn);
    }
    
    
/**
    * Trae el ultimo ID insertado
    * @param string $table --> Nombre de la tabla
    * @param string $campo --> Nombre del serial
    */    
    
public function DB_Last_Insert_ID($table$campo) {
        
$TempRs $this->ComandoSQL("SELECT currval('".$table."_".$campo."_seq') FROM ".$table);
        
$Res pg_fetch_result($TempRs,0,0);
        
pg_free_result($TempRs);
        return 
$Res;
        
$this->close();
    }
    
    
/**
    * Ejecuta una consulta que no regresa datos (UPDATE,INSERT,DELETE)
    * @param string $sql --> Consulta SQL
    */    
    
public function ComandoSQL($sql,$ver 0){
        try{
            
//imprimo consulta
            
if ($ver==1){ echo "<b><i>".$sql."</i></b><br />"; exit();}
            
            if(
$this->status==BD::CERRADA$this->open();

            
$rs pg_query($this->conn$sql) or die (pg_last_error().'<br />Consulta:<b>'.$sql.'</b>');
            return 
$rs;    
            
settype($rs"null");
            
$this->close();
            
        }catch ( 
Exception $e ){
            echo 
$e->getMessage();
            return 
FALSE;
        }
    }
    
    
/**
    * Ejecuta una consulta (SELECT)
    * @param string $sql --> Consulta SQL
    * @return un  array de registros, cada uno siendo un array asociativo de campos
    */    
    
public function QuerySQL($sql,$ver 0){
        try{
            
//imprimo consulta
            
if ($ver==1){ echo "<b><i>".$sql."</i></b><br />";}

            if(
$this->status==BD::CERRADA$this->open();
            
            
$rs=pg_query($this->conn$sql) or die (pg_last_error().'<br/>Consulta:<b>'.$sql.'</b>');
            
            
$registros = array();
            while(
$reg pg_fetch_array($rs)){
                
$registros[] = $reg;
            }
            return 
$registros;
            
settype($rs"null");
            
$this->close();
        }catch ( 
Exception $e ){
            echo 
$e->getMessage();
            return 
FALSE;
        }
    }
            
}
//fin class 
Clase Proyecto
Código PHP:
<?php   require_once 'cnxDB.php';

class 
Proyecto extends BD{

    private 
$nId_Proyecto;
    private 
$nId_Convocatoria;  
    
    public function 
__construct() {
        
parent::__construct();
    }

    public function 
getId_Proyecto(){
        return 
$this->nId_Proyecto;
    }

    public function 
setId_Proyecto($ID_P){
        
$this->nId_Proyecto $ID_P;
    }

    public function 
getId_Convocatoria(){
        return 
$this->nId_Convocatoria;
    }

    public function 
ObtengoProyecto($id ''$Nom ''){

        
$filtro " 1 = 1 ";

        if(!empty(
$id)){
            
$filtro .= " AND nid_proyecto = ".$id;
        }

        if(!empty(
$Nom)){
            
$filtro .= " AND cnombreproyecto = '".$Nom."' ";
        }
        
        
//Obtenemos todos los datos del id
        
$rs $this->QuerySQL("SELECT * FROM tblproyecto WHERE cestatus IS NULL AND $filtro;",0);

        if(
count($rs) > 0){
            
$this->setId_Proyecto($rs[0]['nid_proyecto']);
            
$this->setId_Convocatoria($rs[0]['nid_convocatoria']);
            return 
$rs;
        }
    }
//end ObtengoProyecto()

    
public function InsertarProyecto(){
            .............        
    }
//End InsertarProyecto()
    
}// End class
?>
Clase InformeTecnico
Código PHP:
<?php    require_once 'class.Proyecto.php';

class 
InformeTecnico extends Proyecto{

    private 
$nId_Informe;
    private 
$nId_Proyecto2;

    public function 
__construct() {
        
parent::__construct();
    }
    
    public function 
getId_Informe(){
        return 
$this->nId_Informe;
    }

    public function 
setId_Informe($ID_Inf){
        
$this->nId_Informe $ID_Inf;
    }

    public function 
getId_Proyecto2(){
        return 
$this->nId_Proyecto2;
    }

    public function 
setId_Proyecto2($ID_P){
        
$this->nId_Proyecto2 $ID_P;
    }

   public function 
ObtengoInformeTecnico($Id_Inf '',$Id_Proy ''){
    .....
   }

}
//End Class
La pagina que me marca error..
Código PHP:
<?php   require_once 'class.InformeTecnico.php';

$Dat = new InformeTecnico();

$rs$Dat->QuerySQL("SELECT * FROM tabla WHERE cestatus is null;",0);

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Ejemplo</title>
</head>

<body>
Algo..
</body>
</html>
En esta pagina solo me imprime:

Error de conexion

No se en que este mal espero me puedan ayudar
GRACIAS
  #2 (permalink)  
Antiguo 12/05/2011, 13:59
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Herencia en php

De hecho si ejecuta el método que se hereda:
Código PHP:
$this->conn pg_connect($this->cnx) or die('<b>Error de conexion</b>'); 
Y ahí tienes el mensaje de error que recibes, ¿lo notaste?

Ahora solo debes depurar tu consulta, revisa pg_last_error()
http://www.php.net/manual/en/function.pg-last-error.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/05/2011, 14:10
 
Fecha de Ingreso: febrero-2008
Ubicación: Mexico, D.F.
Mensajes: 23
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Herencia en php

Si el problema es que no entiendo por que no abre el metodo open, en otras clases que tengo si ejecuta el metodo y todo funciona a la perfeccion

Al principio pense que era la clase de InformeTecnico entonces solo inclir la clase Proyecto y aun asi no me quiere ejecutar la consulta.

Solo la ejecuta si incluyo la clase de la base de datos sin heredar nada
  #4 (permalink)  
Antiguo 12/05/2011, 15:47
Avatar de rikardoz  
Fecha de Ingreso: abril-2011
Ubicación: En mi casa
Mensajes: 165
Antigüedad: 13 años
Puntos: 46
Respuesta: Herencia en php

Mira yo trabaje con DB en clases tambien
guiate de aca :
http://www.forosdelweb.com/f18/conexion-db-orientada-objetos-908001/

[URL="http://www.forosdelweb.com/f18/conexion-db-orientada-objetos-908001/"]http://www.forosdelweb.com/f18/conexion-db-orientada-objetos-908001/[/URL]
__________________
Agregadecer no cuesta nada O SI?
  #5 (permalink)  
Antiguo 12/05/2011, 16:20
 
Fecha de Ingreso: febrero-2008
Ubicación: Mexico, D.F.
Mensajes: 23
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Herencia en php

pero no entiendo por que no me abre la conexion, tengo mas clases trabajando de la misma manera pero exactamente esta es la que no trabaja.

El metodo se que si ejecuta pero no se por que no me abre la conexion.

Por ejemplo, tengo otras clases igual de estructuradas y me trabajan bien

cnxDB.php
|
|
V
class.Proyecto.php
|
|
V
class.CostoProyecto.php
|
|
V
pagina.php

y trabaja muy bien.

Pero en la clase InformeTecnico no y ya he comparado la estructura de las clases y metodos y no abre la conexion.

Creo que seria bueno mensionar que el mensaje de die en open() antes era "NO SE CONECTA A DB" y lo cambie por "Error de conexion" y me sigue mostrando el de no se conecta a DB y ya verifique que el archivo este en mi server actualizado y me sigue mostrando ese mensaje
gracias
  #6 (permalink)  
Antiguo 12/05/2011, 16:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Herencia en php

Cita:
Iniciado por zodgyy Ver Mensaje
[...] Creo que seria bueno mensionar que el mensaje de die en open() antes era "NO SE CONECTA A DB" y lo cambie por "Error de conexion" y me sigue mostrando el de no se conecta a DB y ya verifique que el archivo este en mi server actualizado y me sigue mostrando ese mensaje
gracias
¡Pero desde luego!

Entonces el error es completamente tuyo, si por algún motivo nos estas mostrando el archivo que no es ya confundiste a todos. Así que debes entender que PHP no se la pasa inventando mensajes de error de viejos archivos.

Usa el sentido común, reflexiona y revisa que es lo que haces mal.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 12/05/2011, 19:25
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: Herencia en php

Una cosa al margen, nunca una clase debería heredar por el solo hecho de tener una conexión a una base de datos.
Se debe heredar si se tiene una relación de parentesco, si no se puedes igual usar la clase sin necesidad de que herede...

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp

Etiquetas: herencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:39.