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

¿Como acceder a una variable de una clase?

Estas en el tema de ¿Como acceder a una variable de una clase? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. ¿Existe alguna forma que una clase que esté instanciada dentro de otra, pueda acceder a una variable de la primera clase? Me refiero hacer algo ...
  #1 (permalink)  
Antiguo 05/09/2009, 17:06
 
Fecha de Ingreso: septiembre-2006
Mensajes: 127
Antigüedad: 17 años, 8 meses
Puntos: 5
¿Como acceder a una variable de una clase?

¿Existe alguna forma que una clase que esté instanciada dentro de otra, pueda acceder a una variable de la primera clase?

Me refiero hacer algo asi ( código de abajo ), pero que $this->var de la clase 'MyOtherClass', haga referencia a $this->var de la clase 'MyClass'. Lógicamente como está escrito el código es imposible que funcione.


Código PHP:
<?php
class MyClass{
    public 
$var;
    public function 
myFunction(){
        
$var = new MyOtherClass;
        echo 
$var->Show();
    }
}
class 
MyOtherClass{
    function 
Show(){
        return 
$this->var;
    }
}
$var = new MyClass;
$var->myFunction();
?>
Adiós... Gracias.
  #2 (permalink)  
Antiguo 05/09/2009, 20:52
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 9 meses
Puntos: 10
Respuesta: ¿Como acceder a una variable de una clase?

No se puede EXCEPTO que MyOtherClass sea una clase derivada (hija) de MyClass
  #3 (permalink)  
Antiguo 05/09/2009, 23:43
Usuario no validado
 
Fecha de Ingreso: enero-2009
Mensajes: 19
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: ¿Como acceder a una variable de una clase?

No tengo mucha practica con PHP orientado a objetos pero creo que si MyOtherClass es una clase derivada de MyClass se podría ver la variable:
Código PHP:
<?php 
class MyClass
    public 
$var
    public function 
myFunction(){ 
        
$var = new MyOtherClass
        echo 
$var->Show(); 
    } 

class 
MyOtherClass extends MyClass//lo que agregue fue extends MyClass
    
function Show(){ 
        return 
$this->var
    } 

$var = new MyClass
$var->myFunction();
Saludos.
  #4 (permalink)  
Antiguo 06/09/2009, 07:15
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: ¿Como acceder a una variable de una clase?

Cita:
Iniciado por KekoGrama Ver Mensaje
¿Existe alguna forma que una clase que esté instanciada dentro de otra, pueda acceder a una variable de la primera clase?

Me refiero hacer algo asi ( código de abajo ), pero que $this->var de la clase 'MyOtherClass', haga referencia a $this->var de la clase 'MyClass'. Lógicamente como está escrito el código es imposible que funcione.
Estimado, te recomiendo primero antes de "jugar" con objetos para ver qué se puede hacer, primero te fundamentes para qué sirve la POO y qué nos permite hacer y cómo la debemos usar.

Vas a ir más rápido, ya que estás intentando hacer cosas que no tienen sentido, y con un poco de fundamento te darías cuenta.

Si tienes dos clases, y una usa a la otra ("relación de dependencia")
, solo podrá usar sus métodos / atributos públicos (y estos últimos se deben evitar, por lo tanto solo tendrías acceso a sus métodos públicos). Los objetos están pensados para que oculten toda la información que puedan y solo lo que consideres necesario, exponer hacia el exterior.

Si A usa B, A le debe pedir lo que necesita de B si B lo permite. No hace falta acceder a los atributos directamente, usa métodos simples.

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #5 (permalink)  
Antiguo 06/09/2009, 07:29
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: ¿Como acceder a una variable de una clase?

Cita:
Iniciado por tuPac_shakur Ver Mensaje
No tengo mucha practica con PHP orientado a objetos pero creo que si MyOtherClass es una clase derivada de MyClass se podría ver la variable:
Código PHP:
<?php 
class MyClass
    public 
$var
    public function 
myFunction(){ 
        
$var = new MyOtherClass
        echo 
$var->Show(); 
    } 

class 
MyOtherClass extends MyClass//lo que agregue fue extends MyClass
    
function Show(){ 
        return 
$this->var
    } 

$var = new MyClass
$var->myFunction();
Saludos.
Que tal tuPac_shakur, la herencia hay que usarla con cuidado, solo en los casos donde hay relación de parentesco, no se puede ni debe usar de forma mecánica para acceder a los atributos o métodos de un objeto.

De todas formas, los atributos públicos deben evitarse en el 99% de los casos, y a lo sumo, usar atributos protegidos y/o métodos get/set (que también hay que usar limitadamente o generamos el efecto de "atributos públicos).

La regla debería ser: "cuanto menos muestres, mejor, solo lo básico y necesario".

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #6 (permalink)  
Antiguo 06/09/2009, 09:32
 
Fecha de Ingreso: septiembre-2006
Mensajes: 127
Antigüedad: 17 años, 8 meses
Puntos: 5
Respuesta: ¿Como acceder a una variable de una clase?

Es que la razón por la que necesito trabajar así, es porque uso una clase ( suponiendo que está declarada dentro la clase "A" ) que necesita trabajar con MySQL ( trabajo con una clase de MySQL, que también está declarada en la clase "A"), por lo que necesito acceder a la variable que contiene las propiedades, objetos, funciones, blabla..., de la clase MySQL, osea, hacer lo que explique anteriormente. Así me ahorro el tema de estar creando una nueva conexión y de instanciar nuevamente la clase de la MySQL.
  #7 (permalink)  
Antiguo 06/09/2009, 09:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 1 mes
Puntos: 2534
Respuesta: ¿Como acceder a una variable de una clase?

entonces el patrón singleton ¿seria lo adecuado??

así, instancias solo una ves la clase que desees... y en cualquier lugar donde la necesites, la utilizas...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 06/09/2009, 11:15
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: ¿Como acceder a una variable de una clase?

KekoGrama, ¿por qué no especificás claramente cuales son las clases y sus relaciones y las discutimos? ¿sabes usar UML? podrías armar un diagrama con el diseño.

Si lo que quieres es acceder a una "instancia" de MySQL con todos sus datos (atributos) y operaciones (métodos), simplemente es una relación de dependencia entre la clase "A" (la clase "cliente"), la que necesita usar los servicios que ofrece la clase "MySQL".

Listo, ese es un problema. El otro sería que no se repitan las instancias para preservar una única conexión, para ello puedes usar un patrón de diseño llamado Singleton, lo que te asegura que siempre tengas una sola instancia... pero ojo, solo te servirá para una única invocación de un petición a tu url, no para todo el sistema (si tienes dominio.com/ver/datos.php, en vez que una sola petición tenga varias conexiones tengas una sola).

Revisa el manual de PHP que tiene un ejemplo de implementación de Singleton.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #9 (permalink)  
Antiguo 06/09/2009, 11:16
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: ¿Como acceder a una variable de una clase?

Sí, exacto, eso resolvería el segundo problema, no tener instancias repetidas, pero atención, solo se aplica por petición de un usuario, no por todo el sistema (efecto de ser "stateless").
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 07/09/2009, 07:45
 
Fecha de Ingreso: junio-2009
Mensajes: 156
Antigüedad: 15 años
Puntos: 3
Respuesta: ¿Como acceder a una variable de una clase?

Hola.
Ya que se tocó el tema de base de datos y uml, me surgió la duda de como se representa la persistencia de una db en un diagrama uml. Si alguien me pudiera aclarar el tema...
  #11 (permalink)  
Antiguo 07/09/2009, 08:27
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 6 meses
Puntos: 69
Respuesta: ¿Como acceder a una variable de una clase?

ramonw, te invito entonces a que inicies un nuevo post al respecto, para no transgiversar la temática de este post en particular.

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
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 10:22.