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

Cómo compartir variables entre clases?

Estas en el tema de Cómo compartir variables entre clases? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Por ejemplo... tengo una clase con otras clases extendidas.... como puedo tomar una variable de la clase primaria en la clase extendida?.... por ejemplo: Código ...
  #1 (permalink)  
Antiguo 09/04/2010, 01:54
 
Fecha de Ingreso: diciembre-2008
Ubicación: Mi Casa =D
Mensajes: 292
Antigüedad: 15 años, 4 meses
Puntos: 5
Pregunta Cómo compartir variables entre clases?

Por ejemplo... tengo una clase con otras clases extendidas.... como puedo tomar una variable de la clase primaria en la clase extendida?.... por ejemplo:
Código PHP:
class Clase {
var 
$variable;
function 
__construct($variable){
$this->variable $variable;
}
}

class 
OtraClase extends Clase {
function 
__construct(){
//Como puedo llamar a la variable "variable" desde aquí? D:
}

Gracias... espero alguien pueda aclarar mi duda
  #2 (permalink)  
Antiguo 09/04/2010, 02:38
Avatar de AnesGy  
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 14 años, 11 meses
Puntos: 19
Respuesta: Cómo compartir variables entre clases?

Esta opción que te voy a dar se usa mucho. Imaigna que la clase Otraclase es una propiedad (una variable) de Clase. Pues puedes llamar a Otraclase desde Clase y cambiar una propiedad de Otraclase tal que haga referencia a Clase es decir:

Código PHP:
Ver original
  1. class Padre{
  2.  var $hijo;
  3.  ...
  4.  function __construct(){
  5.   $hijo = new Hijo($this);
  6.  }
  7. }
  8.  
  9. class Hijo{
  10. var $padre;
  11. ...
  12. function __construct($parent){
  13.  $this->padre = $parent;
  14. }
  15. }

Y entonces desde $this->padre puedes acceder desde Hijo a todas las propiedades y funciones públicas de Padre.


Otra opción, si no hay parentesco o subordinación entre las clases, es hacer las variables que contienen a las clases globales, o pasarlas como parámetro.

De todas maneras esto no va en este foro, sino en el subforo de Programación Orientada a Objetos.
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it
  #3 (permalink)  
Antiguo 09/04/2010, 08:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Tema movido desde PHP a PHP orientado a objetos

Si la otra clase extiende a la primera clase, la clase hija puede leer todas las propiedades y métodos public y protected de la clase padre.

Esto se llama visibility te recomiendo busques el termino en google.

Saludos.
  #4 (permalink)  
Antiguo 10/04/2010, 20:13
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: Cómo compartir variables entre clases?

podes hacer esto:
Código PHP:
Ver original
  1. class Clase {
  2. public $variable;
  3. function __construct($variable){
  4. $this->variable = $variable;
  5. }
  6. }
  7.  
  8. class OtraClase extends Clase {
  9. function __construct(){
  10. $this->variable
  11. }
  12. }
esto es porque como bien dijo GatorV se debe a la "visibilidad" de los metodos y propiedades de las clases.
  #5 (permalink)  
Antiguo 11/04/2010, 15:16
 
Fecha de Ingreso: diciembre-2008
Ubicación: Mi Casa =D
Mensajes: 292
Antigüedad: 15 años, 4 meses
Puntos: 5
Respuesta: Cómo compartir variables entre clases?

Ohhh okay... entonces si en una clase defino una variable con "public", todas las clases extendidas pueden acceder a ella como si fuera de la misma clase extendida?

Es decir, los hijos acceden a las variables del padre como si las variables fueran de los hijos?

No lo sabía, gracias
  #6 (permalink)  
Antiguo 11/04/2010, 20:36
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Cómo compartir variables entre clases?

Cita:
Iniciado por alex1195 Ver Mensaje
Ohhh okay... entonces si en una clase defino una variable con "public", todas las clases extendidas pueden acceder a ella como si fuera de la misma clase extendida?

Es decir, los hijos acceden a las variables del padre como si las variables fueran de los hijos?

No lo sabía, gracias
Sí, pero siendo públicas puedes acceder a esos atributos/métodos desde cualquier parte, no solo de clases que hereden de esta. Si tu intención es que solo y exclusivamente la clase hija pueda acceder a atributos/métodos de la clase padre, debes declararlas como protected.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #7 (permalink)  
Antiguo 13/04/2010, 05:53
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Cómo compartir variables entre clases?

Chicos, chicos, les recuerdo que en POO, por "estándar de facto", para el desarrollo tradicional los atributos públicos "están prohibidos".
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #8 (permalink)  
Antiguo 13/04/2010, 05:56
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Cómo compartir variables entre clases?

Alex, conceptualmente estás perdido, no existe eso de "clase primaria", no son clases distintas, son la misma clase.

Si tu esperas que la clase padre tenga un constructor y un atributo, y que luego mágicamente la clase hija no tenga un constructor con parámetros y ver los datos... no tienes idea de cómo funciona la herencia, por lo que te recomiendo repasar primero los conceptos antes de intentar probar con código (ya que no vas a llegar muy lejos).

PD: estás usando "var" que es sintaxis en desuso de PHP4, cambia a PHP5.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #9 (permalink)  
Antiguo 17/04/2010, 18:28
 
Fecha de Ingreso: diciembre-2008
Ubicación: Mi Casa =D
Mensajes: 292
Antigüedad: 15 años, 4 meses
Puntos: 5
Respuesta: Cómo compartir variables entre clases?

Cita:
Iniciado por destor77 Ver Mensaje
Código PHP:
Ver original
  1. class Clase {
  2. public $variable;
  3. function __construct($variable){
  4. $this->variable = $variable;
  5. }
  6. }
  7.  
  8. class OtraClase extends Clase {
  9. function __construct(){
  10. $this->variable
  11. }
  12. }
Entonces eso está bien o mal?
Osea... finalmente no se puede hacer esto:
Código PHP:
Ver original
  1. class Clase {
  2. public $variable;
  3. function __construct($variable){
  4. $this->variable = $variable;
  5. }
  6. }
  7.  
  8. class OtraClase extends Clase {
  9. function __construct(){
  10. echo $this->variable;
  11. }
  12. }
  13.  
  14. $clase = new Clase('Variable');
  15. $clase2 = new OtraClase(); //Mostraría "Variable", pero no lo hará... porque no se puede, o si? D:
es decir.. no funciona, pero como puedo hacer algo como eso?

Última edición por alex1195; 17/04/2010 a las 18:42
  #10 (permalink)  
Antiguo 17/04/2010, 23:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Cómo compartir variables entre clases?

Recuerda que una de las principales ventajas de los objetos es su encapsulación, lo que tu expones es imposible, si quieres leer el atributo de la otra clase, dentro de tu clase, tienes que forzosamente pasarla como parámetro o tener un setter y llamarlo.

Otra opción es que esa variable fuera una propiedad estatica, asi la puedes compartir entre todas las clases que sean de ese tipo, o las que la hereden, aunque realmente creo que si estas apenas aprendiendo, mejor primero entiendas para que sirve la herencia y luego vayas a otros temas como miembros y propiedades estaticas.

Aunque PHP te permite "brincar" ciertas reglas, por ejemplo usando una variable global, no es lo recomendable, ya que precisamente rompes con esa encapsulación que debe de tener tu objeto.

Saludos.

Última edición por GatorV; 17/04/2010 a las 23:27
  #11 (permalink)  
Antiguo 15/05/2010, 17:26
 
Fecha de Ingreso: agosto-2008
Ubicación: Puebla, Mexico.
Mensajes: 84
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Cómo compartir variables entre clases?

Si es muy necesario compartir atributos, creo que dejarlos en visibilidad protected seria mas conveniente, se conserva el encapsulamiento del objeto y aparte tienes acceso a ellos mediante herencia =D.
  #12 (permalink)  
Antiguo 16/05/2010, 10:40
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Cómo compartir variables entre clases?

a77icu5, en POO nada es genérico, hay que ver el contexto para aplicar la solución acorde. Colocar todo como protected no es la solución a nada, hay que ver los casos en que se justifica, tampoco la herencia mecánica es recomendado. Encapsular no es sinónimo de usar protected.

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Etiquetas: clases, compartir, variables
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 12:52.