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

extender una clase, pero que los cambios se apliquen a ambas :S

Estas en el tema de extender una clase, pero que los cambios se apliquen a ambas :S en el foro de Frameworks y PHP orientado a objetos en Foros del Web. La verdad no se ni que titulo ponerle a este post. Explicaré mi problema : Tengo una clase que administra mi BD ( cdb ), ...
  #1 (permalink)  
Antiguo 06/10/2007, 12:33
okram
Invitado
 
Mensajes: n/a
Puntos:
extender una clase, pero que los cambios se apliquen a ambas :S



La verdad no se ni que titulo ponerle a este post. Explicaré mi problema :

Tengo una clase que administra mi BD (cdb), tiene funciones tales como query(), nextRow(), total(), etc. etc...

Luego, tengo varias otras clases que deben usar esta primera clase para conectarse a la BD... Por ejemplo, la clase Sesiones.

Bien, deseo que los métodos y propiedades de la clase cdb estén disponibles en la clase sesiones. Lo que hice, y creo que lo mas obvio, es:

Código PHP:
class cdb {
public 
$algo;
///bla bla
 
public function algo() {
// bla bla...
return;
}
}
 
class 
Session extends cdb {
// bla bla...
}
$db = new cdb;
$session = new Session;
 
$session->algo(); 
y funciona...

el problema es que al modificar alguna propiedad de la clase Session, no se modifica la correspondiente en la clase cdb...

No se si me entienda,

EN RESUMEN: deseo lograr esto mismo, pero en PHP5:

Código PHP:
class clasea {
  var 
$nombre;
 
  function 
out() {
    echo 
$nombre;
  }
}
 
class 
claseb {
  var 
$algo;
  function 
claseb() {
    global 
$clasea;
    
$this->algo $clasea;
  }
}
 
$a = new clasea();
$b = new claseb();
$b->algo->nombre 'lo que sea';
 
echo 
$a->nombre//Debe imprimir 'lo que sea' 
Un saludo,
  #2 (permalink)  
Antiguo 06/10/2007, 12:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: extender una clase, pero que los cambios se apliquen a ambas :S

Creo con el codigo que pusiste estas rompiendo un poco lo que es POO, pero si lo quieres hacer asi (cosa que veo muy mal porque no hay encapsulasion) Puedes lograrlo de la misma forma, en PHP5, todavia hay global y todo asi que escribiendo el mismo codigo sirve.

Lo unico que debes de tener en cuenta es que los objetos ahora se pasan por referencia y no por valor, pero con el codigo que pones debe de funcionar.

Saludos
  #3 (permalink)  
Antiguo 07/10/2007, 09:58
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: extender una clase, pero que los cambios se apliquen a ambas :S

Justamente eso es lo que deseo cambiar. Estoy modificando unas clases que hice hace un tiempo y adaptándolas a PHP5... Estuve leyendo sobre herencia de clases y esas cosas, pero no me anda

Tengo este código:

Código PHP:
echo '<pre>';

class 
clasea {
    var 
$nombre;
    function 
out() {
        echo 
"\n<b>el valor es</b>: {$this->nombre}\n";
    }
}

class 
claseb {
    var 
$algo;
}

$a = new clasea();
$b = new claseb();

//Asignamos a la variable $b->algo el objeto clasea
$b->algo = &$a;

$b->algo->nombre 'lo que sea';

$a->out(); //Debe imprimir 'lo que sea'
print_r($a);
print_r($b);

$b->algo->nombre 'otra cosa';

$a->out(); //Debe imprimir 'otra cosa'
print_r($a);
print_r($b);

echo 
'</pre>'
y me imprime esto:
Código:
el valor es: lo que sea
clasea Object
(
    [nombre] => lo que sea
)
claseb Object
(
    [algo] => clasea Object
        (
            [nombre] => lo que sea
        )
)
 
el valor es: otra cosa
clasea Object
(
    [nombre] => otra cosa
)
claseb Object
(
    [algo] => clasea Object
        (
            [nombre] => otra cosa
        )
)
Bien, quiero lograr exactamente eso, solo referenciar y no duplicar el objeto ni nada... Esta bien de la forma en la que lo hago? es valido? estoy respetando la POO y PHP5? o hay otra manera más eficaz de hacerlo??

Gracias por tu respuesta

Un saludo,
  #4 (permalink)  
Antiguo 07/10/2007, 11:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: extender una clase, pero que los cambios se apliquen a ambas :S

Esta bien la forma que lo planetas, solo ten en cuenta que en PHP5 no necesitas usar $b->algo =& $a; ya que como te comente en mi anterior post, las variables se pasan por referencia ahora por lo que:
Código PHP:
$b->algo $a
Te sirve igual.

Saludos.
  #5 (permalink)  
Antiguo 07/10/2007, 13:35
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: extender una clase, pero que los cambios se apliquen a ambas :S

para que la clase sea lo más POO posible recomiendo usar los respectivos getter y setter para acceder a las propiedades privada de la clase.

Código PHP:
class clasea {
    private 
$nombre;

    public function 
out() {
        echo 
"\n<b>el valor es</b>: {$this->nombre}\n";
    }
}

class 
claseb {
    private 
$algo;

    public function 
getAlgo(){
return 
$this->algo;
}

    public function 
setAlgo($value){
$this->algo $value;
}

  #6 (permalink)  
Antiguo 07/10/2007, 15:37
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: extender una clase, pero que los cambios se apliquen a ambas :S

Agradezco la ayuda de ambos GatorV y zsamer

Un saludo,
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 04:41.