Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

problema con herencia

Estas en el tema de problema con herencia en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola como andan... tengo un problemita con la herencia... Yo tengo una super clase llamada BDconexion... en la cual tengo todos los metodos para acceder ...
  #1 (permalink)  
Antiguo 10/09/2005, 06:46
 
Fecha de Ingreso: julio-2004
Mensajes: 61
Antigüedad: 19 años, 9 meses
Puntos: 0
problema con herencia

Hola como andan...

tengo un problemita con la herencia...

Yo tengo una super clase llamada BDconexion... en la cual tengo todos los metodos para acceder a la base de datos...

luego tengo una clase hijo de esta... llamada posteos... la cual como resultado me da una lista de datos sacadas de la bd... claro... un metodo de esta clase llama a un metodo del padre... pero cuando lo llama me dice q no exite el enlaces de conexion... q no hay una conexion a al base de datos....

La unica forma q lo pude solucionar es q en el constructor de la clase hijo(posteos) llame al constructor de la clase padre (BDconexion) y ahi si funciona...

Claro me parece ridiculo hace esto en todas las clases hijos de BDconexion... nose... es la unica forma de hacerlo??

alguana manera de solucionarlo de forma mas eficiente??

gracias

salu2
=P
  #2 (permalink)  
Antiguo 10/09/2005, 07:10
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Holas.

No se si te e entendido bien...a ver.
Código PHP:
<?php
class DB
{
    function 
Conn()
    {
        
//mysql_connect();
        //metodo para conexion a la db
    
}

    function 
Dess()
    {
        
//mysql_close();
        //metodo para descoenctar
    
}

    function 
Consulta()
    {
        
//mysql_query();
        //consulta ala db
    
}

    
//demas métodos
}

class 
Post extends DB
{
    function 
getLastPost()
    {
        
$this->Consulta("SELECT id FROM posts ORDER BY id DESC LIMIT 1");
        
//metodo para cojer el ultimo post
        //es un metodo de ejemplo xD
    
}
    
//demas metodos
}

//para que funcione tienes que crear un objeto de la clase Post.

$Objeto =& new Post;
$Objeto->Conn(); //conectamos
echo $Objeto->getLastPost(); //recogemos el ultimos pst(por ejemplo)
$Objeto->Dess(); //desconectamos
?>
O puedes hacer algo así:
Código PHP:
<?php
class DB
{
    function 
Conn()
    {
        
//mysql_connect();
        //metodo para conexion a la db
    
}

    function 
Dess()
    {
        
//mysql_close();
        //metodo para descoenctar
    
}

    function 
Consulta()
    {
        
//mysql_query();
        //consulta ala db
    
}

    
//demas métodos
}

class 
Post
{
    var 
DB;

    function 
Post(&$objeto//constructor
    
{
        
$this->DB =& $objeto;
        
//$this->DB apunta al objeto DB
    
}

    function 
getLastPost()
    {
        
$this->DB->Consulta("SELECT id FROM posts ORDER BY id DESC LIMIT 1");
        
//metodo para cojer el ultimo post
        //es un metodo de ejemplo xD
    
}
    
//demas metodos
}

$DB =& new DB;
$DB->Conn();
$Post =& new Post($DB);
echo 
$Post->getLastPost();
$DB->Dess();
?>
No se...es lo que se me ocurre.

Saludos ;)
  #3 (permalink)  
Antiguo 11/09/2005, 12:48
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
fed_loco:
Efectivamente, las clases derivadas (hijas) no llaman automáticamente al constructor de su padre. Tienes que indicar explícitamente la llamada:
Código PHP:
class miClasePadre{
   function 
miClasePadre(){
      
// Acciones
   
}
}

class 
miClaseHija extends miClasePadre{
   
// Constructor de la hija
   
function miClaseHija(){
      
// Se debe llamar explícitamente al constructor del padre
      
miClasePadre::miClasePadre();
   }

Saludos
  #4 (permalink)  
Antiguo 11/09/2005, 12:53
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Una manera donde puedes separar un poco más las operaciones, es tener:
- Un objeto "A" que maneje las interacciones básicas con la BD (conexión, consulta, inserción, borrado, actualización).
- Otros objetos "B", "C", "D"... que utilicen una instancia del objeto "A" (en lugar de extenderla) para acceder a la base de datos, y que manejarán el SQL específico para generar consultas, hacer modificaciones, borrados, etc.

Espero que se entienda.

Saludos
  #5 (permalink)  
Antiguo 11/09/2005, 16:57
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Ese es el segundo ejemplo que yo he puesto ;)
  #6 (permalink)  
Antiguo 12/09/2005, 06:43
 
Fecha de Ingreso: julio-2004
Mensajes: 61
Antigüedad: 19 años, 9 meses
Puntos: 0
gracias x las respuestas... lo habia resuelto como la primer respuesta de jpinedo =P

pero ahora tengo mas opciones... vere cual se adapta mas al proyecto o cula es mas facil de usar

gracias!
  #7 (permalink)  
Antiguo 12/09/2005, 18:17
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Hola:

Mejor mira lo que más se adapta al proyecto y no necesariamente lo más fácil.

O sea, que la facilidad sea un punto más de evaluación dentro del contexto del proyecto. Sobretodo evalúa qué tan grande es y cuánto puede crecer en el mediano plazo.
Si el proyecto es más o menos grande o si sabes que va a crecer lo suficiente, una buena separación de capas es lo adecuado. Aunque generalmente es un poco más trabajoso.

Saludos
  #8 (permalink)  
Antiguo 12/09/2005, 21:05
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 19 años
Puntos: 2
Como recomendacion, cuando estes analizando tu problema procura que tu clases candidatas cumplan con propositos bien definidos, o lo que que comunmente se llama responsabilidad,si la clase no cumple con este requisito no uses la clase.
En la redaccion de tu problema es claro que no hay necesidad de herencia ya que la clase posteos en realidad esta en una relacion de dependencia ya que usa la clase BDConexion para hacer consultas, y la clase posteo usa esta consulta para hacer su trabajo, y este trabajo no requiere que la clase posteo reescriba un metodo del padre o que use alguna propiedad del mismo; tu planteameniento hubiera sido valido si la clase extendiera a la padre para agregar funcionalidad para conectarte por ejemplo a RDBMS como oracle, y a un asi, es posible que mediante otro plateamiento resolvieras de otra manera. Y eso es precisamente a lo que se refiere jpinedo que facil no significa a bueno, generalmente en la POO vas atener que pensar un poco mas en termino de responsabilidad y colaboracion para hacer tu aplicaciones mas completas y mas faciles de mantener.
Otra razon para mejorara es que con tu herencia estas acomplando las clases, cuando en realidad pueden estar separadas, para facilitar tu analisis busca en google sobre los patrones GRASP, como quiera aqui te dejo una liga http://www.augustana.ca/~mohrj/cours...ibilities.html pero seguro encuentras mas.
__________________
Saludos!
Mty-NL..
  #9 (permalink)  
Antiguo 13/09/2005, 10:56
 
Fecha de Ingreso: julio-2004
Mensajes: 61
Antigüedad: 19 años, 9 meses
Puntos: 0
gracias!!

ahora veo el link q me dejaste

salu2
=P
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 06:33.