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

Objeto de objeto (No se como ponerle al titulo jaja)

Estas en el tema de Objeto de objeto (No se como ponerle al titulo jaja) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. HOla la duda es como puedo crear objetos dentro de objetos hasta ahora me maneje usando objetos como $hola->saludar(); pero quisiera usar algo mas extenso ...
  #1 (permalink)  
Antiguo 16/07/2008, 20:02
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
De acuerdo Objeto de objeto (No se como ponerle al titulo jaja)

HOla la duda es como puedo crear objetos dentro de objetos
hasta ahora me maneje usando objetos como
$hola->saludar();

pero quisiera usar algo mas extenso como
$hola->opciones->saludar();
$saludos->opciones->hola->ejecutar();

o lo que sea!!


gracias, espero ser claro!
  #2 (permalink)  
Antiguo 16/07/2008, 20:14
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

Simplemente lee primero conceptos sobre objetos, y luego discutimos del tema.

Los objetos pueden asociarse con otros objetos o depender de otros.

Por concepto los objetos se construyen a partir de otros objetos.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #3 (permalink)  
Antiguo 16/07/2008, 21:46
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

gracias por la respuesta.... alguna ayuda enserio ?
  #4 (permalink)  
Antiguo 16/07/2008, 21:51
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

Otro que quiere que le den de comer en la boca.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #5 (permalink)  
Antiguo 16/07/2008, 22:43
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

para tu informacion, si pregunto es porque estoy trabado nada mas...
y para que no hables al (...) dejo el codigo que arme, que al fin y al cabo hace lo que yo queria quneu no se si es asi la forma correcta pero bueno cumpli mi objetivo despues de horas de pensar (pero claro, yo quiero todo masticado ;) )
Código PHP:
class {
    public 
$saludo;
}

class 
{
    public function 
Hola()
    {
        echo 
"Hola";
    }
}

$a = new A;
$a->saludo = new B;

$a->saludo->Hola(); 
  #6 (permalink)  
Antiguo 17/07/2008, 08:18
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: Objeto de objeto (No se como ponerle al titulo jaja)

Hola korg1988,

Te recomiendo leas un poco de diseño de clases y programación POO, ya que por regla NO debes de usar atributos públicos, por lo que intentas hacer no esta correcto, debes de replantearte porque deseas lograr eso y veras que hay formas más correctas de hacerlo.

Saludos.
  #7 (permalink)  
Antiguo 17/07/2008, 09:01
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

Disculpa, pero si preguntas "la duda es como puedo crear objetos dentro de objetos", es que estás trabado al principio de todo, en el origen de los tiempos, por eso te sugiero una releída de conceptos antes de preguntar.

Bien dices, luego te quejas, primero preguntas, y luego que te rezongo, piensas, te esfuerzas y colocas unas líneas de código.

¿Quién estaba equivocado entonces?

Te sugiero buscar ejemplos de UML donde explican dos relaciones básicas en la POO (y que creo he comentado muchas veces en este mismo foro, por consiguiente sería saludable que buscaras aquí también) que son "asociación" y "dependencia".


Asociación es una relación estructural entre objetos
, es decir, construyes objetos con otros objetos ("un atributo es otro objeto").

Dependencia es una relación de uso entre objetos, donde se da directamente en los métodos, recibes por parámetros un objeto y lo usas, o creas un objeto dentro de un método y lo usas (ambos, posteriormente serán "abandonados").

Tomando en cuenta lo dicho, te invito a que codifiques estos dos ejemplos, así yo me encargo de revisarlo y corregirlo.

PD: nah, ¿te esperabas que te lo iba a dejar tan fácil, evitando que uses tu materia gris?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #8 (permalink)  
Antiguo 17/07/2008, 20:49
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

GatorV:
Que problema tiene usar elementos publicos?
si no defino como public una funcion no puedo llamarla :S
Yo tenia entendido uqe las publics se usaban para usar por ejemplo
$db = new mysql;
$db->conectar()
en este caso conectar() era una public function dentro de la clase mysql..... eso era lo que yo tenia entendido

y que las private servian para usarlas dentro de la clase
$this->mifuncion()

pense que era algo "organizacional " mas que otra cosa... para tener todo mas organizado uno mismo
...

Enriqueplace:

QUe quiere decir que ambos posteriormente seran avandonados?
eso quedara obsoleto ?
tiene algun problea de seguridad?
Por otra parte:
por lo uqe entendi, sin leer nada en internet y basandome solo en lo uqe me dijiste cambie mi codigo a esto
Código PHP:
<?php
class {
    public function 
Saludar()
    {
        echo 
"hola";
    }
}

class 
{
    public 
$opcion;
    public function 
B()
    {
        
$this->opcion = new A;
    }
}

$objeto = new B();

$objeto->opcion->Saludar();
?>
segun lei eso era un constructor (lo sabia de antes de esta discucion pero pense que era lo mismo hacerlo como yo lo habia hecho antes...
soy nuevo en poo, entiendan jaja
  #9 (permalink)  
Antiguo 17/07/2008, 21:01
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

Cita:
Iniciado por korg1988 Ver Mensaje
GatorV:
Que problema tiene usar elementos publicos?
si no defino como public una funcion no puedo llamarla :S
ATRIBUTOS públicos, nadie dijo nada sobre MÉTODOS.

Nuevamente, este tema es básico y se habló mucho en el foro (veo que no has buscado).

Cita:
pense que era algo "organizacional " mas que otra cosa... para tener todo mas organizado uno mismo
Más que organizacional es estratégico, de estrategia de diseño.

Cita:
QUe quiere decir que ambos posteriormente seran avandonados?
eso quedara obsoleto ?
tiene algun problea de seguridad?
Te confundiste, lo que digo es que "es una relación de uso", usas y tiras (abandonas) el objeto que recibes por parámetro o que creas dentro del método.

Cita:
Por otra parte:
por lo uqe entendi, sin leer nada en internet y basandome solo en lo uqe me dijiste cambie mi codigo a esto
Mal, muy mal. Si no te fundamentas, no lees, siempre cometerás errores.

Aprender no es solo jugar a prueba y error, un mono golpeando el teclado no escribirá un código POO que funcione, ni aún esperando 100 años.

Lee el manual y luego prueba otra vez.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 17/07/2008, 22:20
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

ya lei ese manual pero que tiene que ver todo eso con lo que yo pido ?

yo no uqiero usar un extends para hacer que mi clase A se una a la B sino que quiero tener a la A dentro de una variable (u objeto como yo le decia) adentro del objeto B
y eso no lo dice en ese manual!

porque sino era facil poner

class B extends A

y listo
... sin ofender, ni mucho menos... vos entendes lo que yo quiero hacer?...

ovbiamente, que yo estoy muy equivocado quiza en la forma de hablar prque no tengo conocimientosy eso pero creo que no se entiende lo que yo quiero hacer
  #11 (permalink)  
Antiguo 18/07/2008, 09:06
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: Objeto de objeto (No se como ponerle al titulo jaja)

Hola korg1988,

Se entiende perfectamente lo que quieres hacer, pero como te comente en un inicio, es incorrecto la forma que lo planteas, ya que yo mencione atributos públicos, son peligrosos ya que no tienes forma de garantizar el control ni lo que tenga la variable.

Lo que yo te comentaba es replantear el porque quieres hacer eso (sí, es posible y se puede hacer), pero no es lo correcto, tu problema que quieres tratar de resolver debe de tener la forma correcta de resolverse.

Es como tratar de parchar un neumático con colaloca, sí funciona, pero no es lo correcto y eventualmente presentará un problema.

Saludos.
  #12 (permalink)  
Antiguo 18/07/2008, 14:10
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

principalmente yo queria hacer eso ya que vi en muchos lenguajes que tienen cosas asi
por ejemplo el objeto System de .net

System.Odbc.Talcosa.esto.lo_otro

y pense que yo podria organizar los objetos de mi sitio de esa forma
por ejemplo

$MiSitio->usuarios->login()
$MiSitio->usuarios->desloguear()
$MiSitio->archivos->abrir()
$MiSitio->archivos->leer()

Etc.Etc
Era para tener todo organizado solamente
por eso queria hacerlo
y bueno para saber hacerlo solo para aprender algo mas
  #13 (permalink)  
Antiguo 18/07/2008, 15:33
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

loading............

OBVIO que puedes crear INSTANCIAS (suena mejor) como atributos de una clase. NO ES UN ERROR. Ya que puedes ponerlo de uso privado (las instancias).
Pero analizandolo de forma estricta, deberías como dicen replantear el sistema y centralizarlo.

connection closed.
__________________

Maborak Technologies
  #14 (permalink)  
Antiguo 18/07/2008, 17:29
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

enrique asi puede ser?
Código PHP:
<?php
class {
    public function 
Saludar()
    {
        echo 
"hola";
    }
}

class 
{
    
    public function 
opcion()
    {
        return new 
A;
    }
}

$objeto = new B;
$objeto->opcion()->Saludar();
?>
No entiendo a que le dicen Replantear el sistema y "centralizarlo"

Gracias saludos
  #15 (permalink)  
Antiguo 18/07/2008, 19:03
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

Lo que me preocupa es que sigues intentando en modalidad de "prueba y error" y eso te lleva a equivocarte constantemente... lo más importante es que entiendas los conceptos, luego codificarlos será relativamente sencillo.

Si hablamos de una relación de "asociación" entre A y B, se representaría así:

A -> B (línea continua)

Código PHP:
class A{
   private 
$b;
   
   public function 
__construct(){
      
$this->= new B();
   }
   public function 
getB(){
      return 
$this->b;
   }
}
class 
B{
   public function 
decirHola(){
      return 
"hola";
   }
}

/* Aquí podrías hacer lo que buscas */ 

$a = new A();
echo 
$a->getB()->decirHola(); 
Y para cerrar el ejemplo, si hablamos de una relación de "asociación" entre A y B, se representa de esta forma:

A --->B (línea punteada)

Lo que significa que no tienes como parte de tu estructura (caso anterior) otro objeto, solo recibes por parámetro o crear dentro de un método, usas el objeto y luego, al concluir el método, este objeto desaparece.

Código PHP:
class A{
   public function 
decirHola($objeto){
      return 
$objeto->decirHola();
   }
}
class 
B{
   public function 
decirHola(){
      return 
"hola";
   }
}

$a = new A();
$b = new B();

echo 
$a->decirHola$b ); 
Y la variación sería:

Código PHP:
class A{
   public function 
decirHola(){
      
$b = new B();
      return 
$b->decirHola();
   }
}
class 
B{
   public function 
decirHola(){
      return 
"hola";
   }
}

$a = new A();
echo 
$a->decirHola(); 
Nota: ni se te ocurra preguntarme qué es mejor , aquí el tema es que cada diseño depende de lo que quieras hacer.

Volviendo a tu ejemplo particular, para hacer lo que quieres, tendrías que hacer algo similiar, así que te invito a que hagas un ejemplo como el que hice y lo coloques luego para ver qué comentarios te podemos hacer al respecto.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #16 (permalink)  
Antiguo 18/07/2008, 20:22
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
De acuerdo Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

Cita:
Iniciado por korg1988 Ver Mensaje
enrique asi puede ser?
Código PHP:
<?php
class {
    public function 
Saludar()
    {
        echo 
"hola";
    }
}

class 
{
    
    public function 
opcion()
    {
        return new 
A;
    }
}

$objeto = new B;
$objeto->opcion()->Saludar();
?>
No entiendo a que le dicen Replantear el sistema y "centralizarlo"

Gracias saludos
pero si yo mal no me fijo lo que puse en el comentario anterior es lo mismo que me terminas de explicar.... entonces lo habia hecho bien yo en mi Ultimo "intento" o no ?
  #17 (permalink)  
Antiguo 19/07/2008, 06:19
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

Cita:
Iniciado por korg1988 Ver Mensaje
pero si yo mal no me fijo lo que puse en el comentario anterior es lo mismo que me terminas de explicar.... entonces lo habia hecho bien yo en mi Ultimo "intento" o no ?
Ese es el problema que veo, no prestas atención y no te fundamentas con conceptos.

Lo que hiciste tú, si bien es similar, no es lo mismo.

Estás retornando una instancia (objeto) y luego usando un método de la misma.

Antes de hacer mecánicamente a->b->c, estaría bueno que pensaras un diseño coherente, ya que no necesariamente esta forma de trabajo te asegura "orden".

Hay autores -a pesar de su aparente practicidad- no sugieren usarlo, o por lo menos, no hacer abuso y usar pocos niveles, ya que luego es difícil seguir la lógica que ocurre en una sola línea.

No siempre es el mejor código el que ocurre en menos líneas.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #18 (permalink)  
Antiguo 19/07/2008, 10:48
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: Objeto de objeto (No se como ponerle al titulo jaja)

Cita:
Iniciado por korg1988 Ver Mensaje
principalmente yo queria hacer eso ya que vi en muchos lenguajes que tienen cosas asi
por ejemplo el objeto System de .net

System.Odbc.Talcosa.esto.lo_otro

y pense que yo podria organizar los objetos de mi sitio de esa forma
por ejemplo

$MiSitio->usuarios->login()
$MiSitio->usuarios->desloguear()
$MiSitio->archivos->abrir()
$MiSitio->archivos->leer()

Etc.Etc
Era para tener todo organizado solamente
por eso queria hacerlo
y bueno para saber hacerlo solo para aprender algo mas
Eso que planteas hacer se conocen como "paquetes" o "namespaces", o "packages" depende del lenguaje que uses, y no es nada como lo que estas haciendo, en PHP todavia no es soportado, pero en PHP 5.3 tendremos a nuestra disposicion namespaces para hacer algo asi:

Código PHP:
import System::ODBC::MySQL as mysql;

$obj = new mysql(); 
Saludos.
  #19 (permalink)  
Antiguo 19/07/2008, 11:00
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Objeto de objeto (No se como ponerle al titulo jaja)

Cita:
Hay autores -a pesar de su aparente practicidad- no sugieren usarlo, o por lo menos, no hacer abuso y usar pocos niveles, ya que luego es difícil seguir la lógica que ocurre en una sola línea.
acepto eso que me dijiste
Cita:
Eso que planteas hacer se conocen como "paquetes" o "namespaces", o "packages" depende del lenguaje que uses, y no es nada como lo que ...
GatorV, gracias por tu respuesta.
yo cuando decia de .net queria dar un ejemplo de como el objeto system tenia varios niveles, y yo queria armar un objeto en php, para mi sitio, que tenga varios niveles de manera de tener organizado todo en ese objeto y crear una instancia
$miSitio = new Sitio();
solamente al principio del script y luego utilizar todos sus niveles en el resto del script como a mi se me valla ocurriendo usarlo

no se si soy claro..

mi duda es, estoy manejandome mal o queriendo hacer algo que no es posible?...
y si esta mal, porque funciona correctamente?
saludos
  #20 (permalink)  
Antiguo 19/07/2008, 11:09
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: Objeto de objeto (No se como ponerle al titulo jaja)

Lo que pasa es que System no es un objeto en si, es un paquete, o namespace, por eso lo que tu quieres hacer es incorrecto.

Si te fijas en los frameworks mas poderosos optan por usar nomenclatura de clases para emular las clases, por ejemplo, Zend:

Zend_Db_Table, quiere decir que del namespace Zend, luego del namespace Db vamos a usar la clase Table.

En PHP5.3 vamos a poder usar:
Código PHP:
import Zend::Db:Table as table;

//o

$table = new Zend::Db::Table(); 
Lo que tu quieres hacer si bien "funciona" no es lo mejor ya que vas a perder escalabilidad y aparte en tu constructor de tu "sitio" vas a levantar objetos que a lo mejor no vas a utilizar y el rendimiento sera muy pobre.

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 18:39.