Foros del Web » Programando para Internet » PHP »

en java se puede meter un objeto dentro de otro, esto se puede en php?

Estas en el tema de en java se puede meter un objeto dentro de otro, esto se puede en php? en el foro de PHP en Foros del Web. Realmente no entiendo como se usa esto, sin embargo en java se usa y se me ocurrió hacer la pregunta. cuando metes un objeto dentro ...
  #1 (permalink)  
Antiguo 27/06/2014, 01:46
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
en java se puede meter un objeto dentro de otro, esto se puede en php?

Realmente no entiendo como se usa esto, sin embargo en java se usa y se me ocurrió hacer la pregunta.

cuando metes un objeto dentro de otro objeto que es lo que sucede

Prueba objeto = new Prueba(); //esto es en java
Pruebas ob = new Pruebas(objeto); /esto es en java
ahora en php
$objeto = new Prueba(); //esto es en php
$ob = new Pruebas($objeto); /esto en php

1-¿mi primera pregunta esto existe en php?
2-¿esto como se puede entender de meter un objeto dentro de otro?
3-¿donde puedo buscar la forma de entender esto ?

gracias
  #2 (permalink)  
Antiguo 27/06/2014, 02:27
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

En PHP también se usa esta práctica. Cuando "metes" un objeto dentro de otro no lo estás metiendo, realmente estas metiendo una referencia a ese objeto.

El objetivo de meter objetos dentro de otros es utilizar la funcionalidad de un objeto en otro. Imagínate que tienes una clase que registra logs y otra que manda mails. Y quieres que cada vez que se manda un mail, éste quede registrado en un log. Lo lógico entonces es "meter" un objeto de la clase de log dentro del objeto de de la clase mail para que cuando ésta envíe un mail utilice el objeto log "metido" para registrar ese log.

No se si queda claro.
  #3 (permalink)  
Antiguo 27/06/2014, 02:38
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

Cita:
Iniciado por cluster28 Ver Mensaje
En PHP también se usa esta práctica. Cuando "metes" un objeto dentro de otro no lo estás metiendo, realmente estas metiendo una referencia a ese objeto.

El objetivo de meter objetos dentro de otros es utilizar la funcionalidad de un objeto en otro. Imagínate que tienes una clase que registra logs y otra que manda mails. Y quieres que cada vez que se manda un mail, éste quede registrado en un log. Lo lógico entonces es "meter" un objeto de la clase de log dentro del objeto de de la clase mail para que cuando ésta envíe un mail utilice el objeto log "metido" para registrar ese log.

No se si queda claro.
mil gracias
me puedes dar unos ejemplos si no es mucha molestia
ya que pense que esto no existia
  #4 (permalink)  
Antiguo 27/06/2014, 02:38
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

En realidad no estás metiendo un objeto dentro de otro en la forma que estás declarando un objeto dentro de otro. No.

Lo que sí estás haciendo con eso es pasar como parámetro la instancia/copia de un objeto al constructor de otro. Y eso sí es posible.

Es fácil de entender: desde el momento que puedes guardar la instancia en una variable, esa variable la puedes transportar a donde quieras en el programa ¿cierto? Entondes es coherente y lógico que esa variable con la instacia a ese objeto puedas usarlo dentro de otra clase.

De otra manera las clases no serían instaciables y no habría forma de recoger el valor que generan en una variable o arreglo.

Hay una explicación un poco más técnica.

Si una variable es un espacio reservado en memoria, lo que estás guardando en memoria es una copia de las instrucciones que contiene esa clase, que más adelante el parser/intérprete leerá e intentará ejecutar.

Para entender esto, prueba lo siguiente en PHP

Código PHP:
Ver original
  1. <?php
  2. class class1{
  3.     public function __construct() {
  4.         return "hola mundo";
  5.     }
  6.    
  7.     public function method1(){
  8.         return "method1";
  9.     }
  10. }
  11.  
  12.  
  13. class class2{
  14.     public function __construct() {
  15.     }
  16.    
  17.     public function method2($input){
  18.         return $input;
  19.     }
  20. }
  21.  
  22. $obj= new class1();
  23.  
  24. $obj2=new class2();
  25.  
  26. echo $obj2->method2($obj->__construct());
  27.  
  28. echo "<br>";
  29.  
  30. echo $obj2->method2($obj->method1());
  31.  
  32. /*
  33. imprime
  34.  
  35. hola mundo
  36. method1
  37.  
  38. */
  39.  
  40. ?>
__________________
Ayúdame a hacerlo por mi mismo.
  #5 (permalink)  
Antiguo 27/06/2014, 03:10
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

Cita:
Iniciado por guardarmicorreo Ver Mensaje
En realidad no estás metiendo un objeto dentro de otro en la forma que estás declarando un objeto dentro de otro. No.

Lo que sí estás haciendo con eso es pasar como parámetro la instancia/copia de un objeto al constructor de otro. Y eso sí es posible.

Es fácil de entender: desde el momento que puedes guardar la instancia en una variable, esa variable la puedes transportar a donde quieras en el programa ¿cierto? Entondes es coherente y lógico que esa variable con la instacia a ese objeto puedas usarlo dentro de otra clase.

De otra manera las clases no serían instaciables y no habría forma de recoger el valor que generan en una variable o arreglo.

Hay una explicación un poco más técnica.

Si una variable es un espacio reservado en memoria, lo que estás guardando en memoria es una copia de las instrucciones que contiene esa clase, que más adelante el parser/intérprete leerá e intentará ejecutar.

Para entender esto, prueba lo siguiente en PHP

Código PHP:
Ver original
  1. <?php
  2. class class1{
  3.     public function __construct() {
  4.         return "hola mundo";
  5.     }
  6.    
  7.     public function method1(){
  8.         return "method1";
  9.     }
  10. }
  11.  
  12.  
  13. class class2{
  14.     public function __construct() {
  15.     }
  16.    
  17.     public function method2($input){
  18.         return $input;
  19.     }
  20. }
  21.  
  22. $obj= new class1();
  23.  
  24. $obj2=new class2();
  25.  
  26. echo $obj2->method2($obj->__construct());
  27.  
  28. echo "<br>";
  29.  
  30. echo $obj2->method2($obj->method1());
  31.  
  32. /*
  33. imprime
  34.  
  35. hola mundo
  36. method1
  37.  
  38. */
  39.  
  40. ?>
hermano eres un genio
que ejemplo tan genial
solo quiero agregar esto,

echo $obj2->method2($obj->__construct());

me estoy llevando el método adentro por así decir dentro de la otra clase
y por eso se imprime, eso es correcto
  #6 (permalink)  
Antiguo 27/06/2014, 03:34
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

Estás ejecutando una clase y un método dentro de otro método perteneciente a otra clase.

clase->método [dentro de] método<-clase

Código PHP:
Ver original
  1. class class3{
  2.     public function __construct() {
  3.         return "el construct";
  4.     }
  5.    
  6.     public function method3(){
  7.         return "otro metodo";
  8.     }
  9. }
  10.  
  11. class class4{
  12.    
  13.     private $object;
  14.    
  15.     public function __construct($obj, $method){
  16.        
  17.         $this->object= $obj->$method();
  18.     }
  19.    
  20.     public function method4(){
  21.         return $this->object;
  22.     }
  23. }
  24. echo "<br>";
  25. $obj=new class3();
  26.  
  27. echo $obj2=(new class4($obj, 'method3'))->method4();
  28.  
  29. echo "<br>";
  30.  
  31. echo $obj2=(new class4($obj, '__construct'))->method4();
  32.  
  33. /*
  34.  
  35. imprime
  36.  
  37. otro metodo
  38. el construct
  39.  
  40. */
__________________
Ayúdame a hacerlo por mi mismo.
  #7 (permalink)  
Antiguo 27/06/2014, 03:52
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

Cita:
Iniciado por guardarmicorreo Ver Mensaje
Estás ejecutando una clase y un método dentro de otro método perteneciente a otra clase.

clase->método [dentro de] método<-clase

Código PHP:
Ver original
  1. class class3{
  2.     public function __construct() {
  3.         return "el construct";
  4.     }
  5.    
  6.     public function method3(){
  7.         return "otro metodo";
  8.     }
  9. }
  10.  
  11. class class4{
  12.    
  13.     private $object;
  14.    
  15.     public function __construct($obj, $method){
  16.        
  17.         $this->object= $obj->$method();
  18.     }
  19.    
  20.     public function method4(){
  21.         return $this->object;
  22.     }
  23. }
  24. echo "<br>";
  25. $obj=new class3();
  26.  
  27. echo $obj2=(new class4($obj, 'method3'))->method4();
  28.  
  29. echo "<br>";
  30.  
  31. echo $obj2=(new class4($obj, '__construct'))->method4();
  32.  
  33. /*
  34.  
  35. imprime
  36.  
  37. otro metodo
  38. el construct
  39.  
  40. */
eres un genio
mejor que un libro
  #8 (permalink)  
Antiguo 27/06/2014, 03:59
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

Gracias, pero no lo creo :) todos nos equivocamos, yo el primero, seguro que es posible explicarlo de otra manera y mejor ;)
__________________
Ayúdame a hacerlo por mi mismo.
  #9 (permalink)  
Antiguo 27/06/2014, 04:05
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

Cita:
Iniciado por guardarmicorreo Ver Mensaje
Gracias, pero no lo creo :) todos nos equivocamos, yo el primero, seguro que es posible explicarlo de otra manera y mejor ;)
una pregunta mas
y esto como lo encuentro en internet
imagino que tiene un nombre
  #10 (permalink)  
Antiguo 27/06/2014, 04:06
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

De echo, yo me quedo con la duda de si una instancia de una clase guardada en una variable es una copia de las instrucciones de una clase o es una copia de la referencia de esa clase.

Ahí no llego y me gustaría que viniera otra persona a aclarar ese punto, es por curiosidad :P
__________________
Ayúdame a hacerlo por mi mismo.
  #11 (permalink)  
Antiguo 27/06/2014, 04:22
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

Lo encontré. En la variable se guarda una referencia a la clase, no una copia de las instrucciones de la clase.

http://www.php.net/manual/es/languag...references.php

Cita:
una pregunta mas
y esto como lo encuentro en internet
imagino que tiene un nombre
No creo que el echo de usar un objeto dentro de una propiedad de otro objeto tenga un nombre específico y estándar. Es una instaciación común, con la particularidad de que en vez de utilizar ese objeto en un paradigma procedural es en un paradigma orientado a objetos. Yo diría que es una copia y uso completo de un objeto, puesto que existe este otro concepto de clonación de objetos, aunque se refiere al uso de propiedades específicamente y no al de métodos específicamente.

http://www.php.net/manual/es/language.oop5.cloning.php
__________________
Ayúdame a hacerlo por mi mismo.
  #12 (permalink)  
Antiguo 27/06/2014, 04:44
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

No lo he probado porque ahora mismo estoy currando y no puedo probarlo. Pero esto no tiene que mostar "hola mundo"

Código PHP:
echo $obj2->method2($obj->__construct()); 
Un constructor devuelve siempre un objeto. No puedes retornar otro tipo de dato. Anda que no le di vueltas a esto con mi exjefe que devolvia false si fallaba la creación del objeto y luego comprobaba si el resultado de new Objeto era realmente un objeto. Vamos que picábamos código inútil.
  #13 (permalink)  
Antiguo 27/06/2014, 05:06
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

Cita:
Iniciado por cluster28 Ver Mensaje
No lo he probado porque ahora mismo estoy currando y no puedo probarlo. Pero esto no tiene que mostar "hola mundo"

Código PHP:
echo $obj2->method2($obj->__construct()); 
Un constructor devuelve siempre un objeto. No puedes retornar otro tipo de dato. Anda que no le di vueltas a esto con mi exjefe que devolvia false si fallaba la creación del objeto y luego comprobaba si el resultado de new Objeto era realmente un objeto. Vamos que picábamos código inútil.
Creo que te equivocas.

Como bien dices, no funcionaría y, por lo tanto, daría error lo siguiente

Código PHP:
Ver original
  1. echo (new class1());
  2.  
  3. echo (new class2());
  4. //tampoco funcionaría lo siguiente
  5. echo $obj;
  6.  
  7. echo $obj2;

Pero si te fijas en el ejemplo que has puesto

Código PHP:
Ver original
  1. //el código que hay anterior es este
  2. $obj= new class1();
  3.  
  4. $obj2=new class2();
  5.  
  6. //este el ejemplo que has puesto
  7. echo $obj2->method2($obj->__construct());

Si te fijas, el __construct de la class1 ha sido inicializado antes de ser utilizado, por lo tanto, lo puedo imprimir de la manera que tú dices que no se puede.

Esto se debe a que __construct solo sirve, en un principio, para inicializar una clase, y por ello no puedo utilizarlo, es decir, no puedo utilizar algo que todavía no se ha inicializado, pero una vez inicializado, sí puedo utilizarlo.
__________________
Ayúdame a hacerlo por mi mismo.
  #14 (permalink)  
Antiguo 27/06/2014, 05:20
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: en java se puede meter un objeto dentro de otro, esto se puede en php?

Tienes razón. No lo había entendido. Nunca he probado en llamar al método __construct() una vez creado el objeto. Por lo visto se comporta con un método cualquiera una vez instanciada la clase. Que gracia.

Etiquetas: java, meter, objeto
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 11:51.