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

PHP OO Duda con clases (instaciar clase)

Estas en el tema de Duda con clases (instaciar clase) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buen día, Tengo una clase la cual los todos métodos van a utilizar otra clase y unos métodos de esa clase (en comun), mi pregunta ...
  #1 (permalink)  
Antiguo 14/07/2011, 13:47
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Duda con clases (instaciar clase)

Buen día,

Tengo una clase la cual los todos métodos van a utilizar otra clase y unos métodos de esa clase (en comun), mi pregunta es como instanciar la clase en los métodos o puedo instanciarla en el constructor para que todos los métodos queden con la clase ya instanciada.

Ejemplo de la clase que quiero hacer:

Código PHP:
Ver original
  1. class ClaseA{
  2.    
  3.     function __construct(){
  4.     }
  5.    
  6.     public function uno(){
  7.         require_once('unaPagina.php');
  8.         $unaVar = new ClassB;
  9.         $unaVar->metodo1;
  10.         $unaVar->metodo2;
  11.         // otros codigos aqui
  12.     }
  13.  
  14.     public function dos(){
  15.         require_once('unaPagina.php');
  16.         $unaVar = new ClassB;
  17.         $unaVar->metodo1;
  18.         $unaVar->metodo2;
  19.         // otros codigos aqui
  20.     }
  21.    
  22. }

Ejemplo de posible solucion:

Código PHP:
Ver original
  1. require_once('unaPagina.php');
  2. class ClaseA{
  3.    
  4.     function __construct(){
  5.         $this->claseB = instanciarClaseB();
  6.     }
  7.    
  8.     public function instanciarClaseB(){
  9.         $unaVar = new ClaseB;
  10.         $unaVar->metodo1;
  11.         $unaVar->metodo2;
  12.     }
  13.    
  14.     public function uno(){
  15.         $unaVar->metodo3; // ClaseB
  16.     }
  17.  
  18.     public function dos(){
  19.         $unaVar->metodo4; // ClaseB
  20.     }
  21.    
  22. }

O solo es posible con:

Código PHP:
Ver original
  1. class ClaseA extends ClaseB{
  2. // codigo aqui
  3. }

Muchas gracias por sacarme de la duda.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???

Última edición por jotaincubus; 14/07/2011 a las 13:49 Razón: Error en códigos.
  #2 (permalink)  
Antiguo 14/07/2011, 13:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda con clases (instaciar clase)

Instanciar la misma clase por cada método me parece redundante, descarta esa opción.

Si solo por el hecho de usar los métodos de otra clase vas a heredar entonces ya estas mal de concepto, descarta esa idea.

Finalmente me parece congruente que instancies la clase auxiliar en el constructor, en una propiedad privada de tu clase, ahí si tendría sentido.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 14/07/2011, 14:00
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Duda con clases (instaciar clase)

Muchas gracias por contestar Pateketrueke,

Cita:
Finalmente me parece congruente que instancies la clase auxiliar en el constructor, en una propiedad privada de tu clase, ahí si tendría sentido.
Según esto el segundo planteamiento que mostré seria valido para lo que intento hacer ?

Discúlpame, por que NO es necesario utilizar heredamiento en este caso ?

Muchas gracias.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #4 (permalink)  
Antiguo 14/07/2011, 14:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda con clases (instaciar clase)

Cita:
Iniciado por jotaincubus Ver Mensaje
Según esto el segundo planteamiento que mostré seria valido para lo que intento hacer ?
Mas o menos, el concepto está bien, pero la sintaxis no.

Cita:
Iniciado por jotaincubus Ver Mensaje
Discúlpame, por que NO es necesario utilizar heredamiento en este caso ?
La herencia solo debe hacer en el caso donde ambos miembros estén íntimamente relacionados, si solo piensas usar la clase "padre" como toolkit de funciones no tiene sentido.

Siempre que un objeto hereda de otro es porque comparten mucha de la funcionalidad, propiedades, etc.

No se si realmente es necesario o no la herencia en tu caso, pues las clases las describes solo como ejemplos. En el mundo real no es tan sencillo tomar un decisión sin conocer ampliamente la relación y objetivo de ambas clases.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 14/07/2011, 14:27
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Duda con clases (instaciar clase)

Ok, muchas gracias por la informacion de las herencias, ahora bien, me dices que:

Cita:
el concepto está bien, pero la sintaxis no.
Que de malo tiene mi sintaxis ? solo seria colocar private function instanciarClaseB() no se por que esta mal, ya que lógicamente así debería funcionar.

Hace falta algo mas ?

Yo se hacer clases pero es la primera vez que se me presenta ese tipo de situación y quiero llevar esa clase al "siguiente nivel" (jajajajaja es molestando)

Si me pudieses dar un ejemplo o una idea o un link donde se muestre como hacer ese tipo de instancias te agradeceré enormemente.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #6 (permalink)  
Antiguo 14/07/2011, 15:21
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Duda con clases (instaciar clase)

Efectivamente lo que dijo Pateketrueke es verdadero, no es así de simple para realizar ese proceso, hice un pequeño TEST para ver si me funcionaba pero me saca error, miren lo que intente de prueba:

Código PHP:
Ver original
  1. class ClaseA{
  2.    
  3.     function __construct(){
  4.        
  5.     }
  6.    
  7.     public function metodoUNO($a){ 
  8.         echo $a;
  9.     }
  10. }
  11.  
  12. class ClaseB{
  13.    
  14.     private $instanciaCLaseA;
  15.    
  16.     function __construct($instanciaClaseA = NULL){
  17.         $this->instanciaCLaseA = instanciarA();
  18.     }
  19.    
  20.     private function instanciarA(){
  21.         $claseA = new ClaseA();
  22.     }
  23.    
  24.     public function metodoDOS(){
  25.         $claseA->metodoUNO("hola ");
  26.         echo "mundo";
  27.     }
  28. }
  29. $final = new ClaseB;
  30. $final->metodoDOS();

Gracias al que me pueda brindar un poco de ayuda y me pueda orientar.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #7 (permalink)  
Antiguo 14/07/2011, 15:28
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Duda con clases (instaciar clase)

El metodo instanciarA no retorna nada, y para acceder a la propiedad debes utilizar $this

Código PHP:
Ver original
  1. public function __construct($instanciaClaseA = null)
  2. {
  3.     if(null === $instanciaClaseA) {
  4.         $instanciaClaseA = new ClaseA();
  5.     }
  6.     $this->instanciaCLaseA = $instanciaClaseA;
  7. }
  8.  
  9. public function metodoDOS()
  10. {
  11.     $this->instanciaCLaseA->metodoUNO("hola ");
  12. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 14/07/2011, 15:34
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
Respuesta: Duda con clases (instaciar clase)

Cita:
Si me pudieses dar un ejemplo o una idea o un link donde se muestre como hacer ese tipo de instancias te agradeceré enormemente.
A veces nos vamos al código sin entender bien los conceptos.

Lo que estas haciendo en ese ejemplo se llama "Composición" estas construyendo un objeto con otros objetos TODO depende de esto y no de si es factible heredar de otro objeto solo por reutilizar código o funciones.

Estaría bien que checaras los conceptos de composición y agregación, así como el principio de liskov para la herencia de objetos.
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #9 (permalink)  
Antiguo 14/07/2011, 15:37
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Duda con clases (instaciar clase)

Muy interesante, algún libro que hable de esto en profundidad junto con el principio de liskov?

Un saludo y gracias!
  #10 (permalink)  
Antiguo 14/07/2011, 15:40
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Duda con clases (instaciar clase)

Cosa mas grande caballero, jajajaja funciono a la perfección muchas gracias por tu ayuda, ahora puedo organizar toda la clase completa con este pequeño ejemplo.

Puedo llamar los métodos que quiera de la claseA en el constructor así ?

Código PHP:
Ver original
  1. public function __construct($instanciaClaseA = null)
  2. {
  3.     if(null === $instanciaClaseA) {
  4.         $instanciaClaseA = new ClaseA();
  5.     }
  6.     $this->instanciaCLaseA = $instanciaClaseA;
  7.     $this->instanciaCLaseA->metodoX();
  8. }
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #11 (permalink)  
Antiguo 14/07/2011, 15:43
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Duda con clases (instaciar clase)

Cita:
Lo que estas haciendo en ese ejemplo se llama "Composición" estas construyendo un objeto con otros objetos TODO depende de esto y no de si es factible heredar de otro objeto solo por reutilizar código o funciones.
Muchas gracias amigo por la información, lo que pasa es que a veces se hace muy dificil investigar acerca de un tema sin saber que es o como se llama.

Por ejemplo yo buscaba en google "Clase dentro de constructor php" o "Instanciar clase dentro de constructor php" pero me salían cosas que nada que ver.

Pero acabo de buscar "Composición de clases en PHP" y ahí me salio exactamente lo que planteo en este tema.

Muchas gracias por la info nuevamente y me pondré a leer sobre este tema.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #12 (permalink)  
Antiguo 14/07/2011, 15:44
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
Respuesta: Duda con clases (instaciar clase)

Cita:
Iniciado por miktrv Ver Mensaje
Muy interesante, algún libro que hable de esto en profundidad junto con el principio de liskov?

Un saludo y gracias!
Claro cualquier libro de teoría de objetos y patrones, por lo regular son para JAVA pero los conceptos son muy claros o busca tutoriales en google que digan, Agregación y composición con objetos, patrones de diseño con UML y veras la luz.

Para php me encanta.

PHP and patterns

http://www.apress.com/9781430229254
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #13 (permalink)  
Antiguo 14/07/2011, 15:47
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
Respuesta: Duda con clases (instaciar clase)

Cita:
Iniciado por jotaincubus Ver Mensaje

Muchas gracias por la info nuevamente y me pondré a leer sobre este tema.
Felicidades por ponerte a checar el tema y si tienes razón a veces uno no conoce el concepto y por ende no encontramos lo que buscamos..

Este ejemplo es bueno

http://www.forosdelweb.com/f68/como-...9/#post1949942
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #14 (permalink)  
Antiguo 14/07/2011, 15:47
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Duda con clases (instaciar clase)

Muchas gracias,

Lo lleré :D

Un saludo!

Etiquetas: clases, php
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:46.