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

Duda sobre visibilidad

Estas en el tema de Duda sobre visibilidad en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola buenas tardes. Resulta que tengo una clase... Código: <?php class IDNombre { private $id = null; private $nombre = null; //---------------------------------------------------- function IDNombre() { ...
  #1 (permalink)  
Antiguo 16/06/2009, 07:21
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Duda sobre visibilidad

Hola buenas tardes.

Resulta que tengo una clase...

Código:
<?php

class IDNombre
{

        private $id          = null;
        private $nombre = null;

        //----------------------------------------------------

        function IDNombre() {
        }

        //----------------------------------------------------

        public function getId() {
            return $this->id;
        }

        //----------------------------------------------------

        public function setId( $id ) {
            $this->id = $id;
        }

}
?>
... y otra que hereda de la primera, y tiene una propiedad propia

Código:
<?php


class IDNombreValor extends IDNombre
{

        private $valor1 = null;

        //----------------------------------------------------

        function IDNombreValor() {
        }

        //----------------------------------------------------

        public function getValor1() {
            return $this->valor1;
        }

        //----------------------------------------------------

        public function setValor1( $valor1 ) {
            $this->valor1 = $valor1;
        }

}
En otra clase hago...

Código:
    $obj = new IDNombreValor();
    $obj->setId    ( 111 );
    $obj->setNombre( "el_nombre"      );
    $obj->setValor1( "el_valor_1"  );
Me sucede que si las propiedades tanto de la clase padre, como de la clase que hereda de ella no son públicas, no puedo acceder a ellas a través de los métodos (aunque son públicos).

Cuando programaba en Java lo hacía exáctamente así sin ningún tipo de problema, pues era el método de cada clase el que interactuaba con las propiedades... ¿me podría alguien por favor expliar qué hago mal?

Muchas gracias

Última edición por MikiBroki; 16/06/2009 a las 07:28
  #2 (permalink)  
Antiguo 16/06/2009, 09:53
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Duda sobre visibilidad

Para que los atributos de la clase padre sean visibles para sus clases hijas deben ser o protected.

Saludos!
  #3 (permalink)  
Antiguo 16/06/2009, 13:00
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
Respuesta: Duda sobre visibilidad

muy raro en el ejemplo que expones usando getId() o getNombre() te debería funcionar...

Saludos.
  #4 (permalink)  
Antiguo 16/06/2009, 16:50
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Respuesta: Duda sobre visibilidad

Sí, he probado a poner tanto los atributos de la clase padre como la hijo en protected, pero nada, como private tampoco, tan sólo me funciona si son public y no lo entiendo !

Gracias
  #5 (permalink)  
Antiguo 16/06/2009, 17:59
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
Respuesta: Duda sobre visibilidad

Pues el ejemplo que expones a mi me funciona bien, sería ver como lo estas implementando.

Saludos.
  #6 (permalink)  
Antiguo 17/06/2009, 04:02
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Respuesta: Duda sobre visibilidad

Efectivamente después de seguir dándome de bruces esa parte sí que funciona, el problema viene dado porque uso get_objects_vars() para obtener las propiedades del objeto y con ellos construir una cadena JSON, pero dicha función no devuelve las propiedades definidas como private.

La solución que de momento le veo a esto, es poner las propiedades que voy a devolver como public, pero no me gusta, rompe la filosofía OOP.

Muchas gracias
  #7 (permalink)  
Antiguo 17/06/2009, 09:43
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
Respuesta: Duda sobre visibilidad

En efecto get_object_vars() solo trae las propiedades privadas.

Lo que puedes hacer es usar el Reflection API para extraer las variables, pero creo es más complicado.

Lo que podrías hacer es tener una propiedad privada que sea un contenedor, y luego usar las funciones mágicas __get y __set para establecer variables en ese contenedor y tener luego una función que te regrese ese array en JSON.

Saludos.
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 01:27.