Foros del Web » Programando para Internet » PHP »

se puede instanciar adentro de una clase en php

Estas en el tema de se puede instanciar adentro de una clase en php en el foro de PHP en Foros del Web. se puede instanciar adentro de una clase en php, ya que vi que en java creo que se puede, como por ejemplo public class casa ...
  #1 (permalink)  
Antiguo 28/03/2014, 01:03
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 13 años, 1 mes
Puntos: 8
se puede instanciar adentro de una clase en php

se puede instanciar adentro de una clase en php, ya que vi que en java creo que se puede, como por ejemplo

public class casa
{
static void main(String args[])
{
Shirt myShirt;
myShirt =new Shirt();
myshirt.displayInformacion();
}
}

si se fijan adentro de una clase hay una instancia que es
myShirt =new Shirt();
esto se puede en php y si se puede como seria un ejemplo
gracias
  #2 (permalink)  
Antiguo 28/03/2014, 02:17
 
Fecha de Ingreso: diciembre-2012
Mensajes: 75
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: se puede instanciar adentro de una clase en php

Si se puede pero tienes que incluir la clase que quieres instanciar dentro de la clase donde instancias

Código PHP:
 inlcude ''lib/shirt.php"; 
poniendo claro esta la ruta de tu clase

PD.- Creo que si incluyes la clase en el archivo desde el que llamas al método también vale
  #3 (permalink)  
Antiguo 28/03/2014, 09:44
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: se puede instanciar adentro de una clase en php

Cita:
Iniciado por jor_0203 Ver Mensaje
se puede instanciar adentro de una clase en php, ya que vi que en java creo que se puede, como por ejemplo

public class casa
{
static void main(String args[])
{
Shirt myShirt;
myShirt =new Shirt();
myshirt.displayInformacion();
}
}

si se fijan adentro de una clase hay una instancia que es
myShirt =new Shirt();
esto se puede en php y si se puede como seria un ejemplo
gracias
Claro que se puede:
Código PHP:
Ver original
  1. class A {
  2.     public function ejecutar(){
  3.         echo 'Instanciado dentro de B';
  4.     }
  5. }
  6.  
  7. class B {
  8.  
  9.     private $a;
  10.  
  11.     public function __construct(){
  12.         $this->a = new A();
  13.     }
  14.  
  15.     public function ejecutarA(){
  16.         $this->a->ejecutar();
  17.     }
  18. }

Puedes instanciar en el constructor o los métodos de la clase. Pero generalmente no se aconseja hacerlo, ya que esta practica oculta dependencias y rompe con la encapsulación. Además de que hay otras formas de manejar la creación de objetos y reducir el acoplamiento
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #4 (permalink)  
Antiguo 28/03/2014, 13:27
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: se puede instanciar adentro de una clase en php

@hhs en ningún momento está rompiendo la encapsulación, la clase A está declarada en el mismo ámbito de la B, por lo tanto ambas son clases publicas, lo diferente sería que A la declarara dentro de B, cosa que no recomiendo, pero igual no hay ruptura de encapsulación.

el método ejecutar de la clase A es público, por lo cual se puede acceder al ser instanciado, la encapsulación se rompe si pudiera llamar a uno privado o protegido, y hasta donde sé PHP no permite hacer esto.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 28/03/2014, 16:39
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: se puede instanciar adentro de una clase en php

Cita:
Iniciado por maycolalvarez Ver Mensaje
@hhs en ningún momento está rompiendo la encapsulación, la clase A está declarada en el mismo ámbito de la B, por lo tanto ambas son clases publicas, lo diferente sería que A la declarara dentro de B, cosa que no recomiendo, pero igual no hay ruptura de encapsulación.

el método ejecutar de la clase A es público, por lo cual se puede acceder al ser instanciado, la encapsulación se rompe si pudiera llamar a uno privado o protegido, y hasta donde sé PHP no permite hacer esto.
Entiendo tu punto maycolalvarez pero yo no me referia a el ocultamiento de datos ("data hiding"), si no a la encapsulación de tipos y de diseño, por eso aclaraba que hay otras formas de crear las instancias y que B se mantenga ignorante de A si quieres verlo así.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 29/03/2014, 02:46
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 13 años, 1 mes
Puntos: 8
Respuesta: se puede instanciar adentro de una clase en php

Cita:
Iniciado por hhs Ver Mensaje
Claro que se puede:
Código PHP:
Ver original
  1. class A {
  2.     public function ejecutar(){
  3.         echo 'Instanciado dentro de B';
  4.     }
  5. }
  6.  
  7. class B {
  8.  
  9.     private $a;
  10.  
  11.     public function __construct(){
  12.         $this->a = new A();
  13.     }
  14.  
  15.     public function ejecutarA(){
  16.         $this->a->ejecutar();
  17.     }
  18. }

Puedes instanciar en el constructor o los métodos de la clase. Pero generalmente no se aconseja hacerlo, ya que esta practica oculta dependencias y rompe con la encapsulación. Además de que hay otras formas de manejar la creación de objetos y reducir el acoplamiento
tu me dices que esta es una forma

class B {
private $a;
public function __construct(){
$this->a = new A();
}
public function ejecutarA(){
$this->a->ejecutar();
}
}

si te fijas llamo a la clase asi $this->a = new A();
pero porque, si es tan fácil llamar a una clase adentro de un método entonces
no necesito esto de herencia
public class Herencia extends ClaseHeredada{

}
según entiendo, esto es lo que me confunde, ya que podemos estar llamandolas desde cualquier método sin necesitar de la palabra extends o etc en la clase
  #7 (permalink)  
Antiguo 29/03/2014, 12:33
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 13 años, 1 mes
Puntos: 8
Respuesta: se puede instanciar adentro de una clase en php

class A
{
public function ejecutar()
{
echo 'Instanciado dentro de B';
}
}

class B
{
private $a;
public function __construct()
{
$this->a = new A();
}
public function ejecutarA()
{
$this->a->ejecutar();
}
}

si se fijan en este ejemplo y en muchos mas, se puede llamar a la clase así $this->a = new A(); desde adentro de una clase
pero si la puedo llamar así, cual es el sentido para llamarlo por herencia o abstracion o interface
ya que lo puedo llamar adentro de una clase y no necesito de esto.
por ejemplo, creo que no tiene sentido usar la herencia

public class Herencia extends ClaseHeredada{

}
según entiendo, esto es lo que me confunde, ya que podemos estar llamandolas desde cualquier método sin necesitar de la palabra extends o etc en la clase

Última edición por jor_0203; 29/03/2014 a las 12:38
  #8 (permalink)  
Antiguo 29/03/2014, 14:32
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 12 años, 5 meses
Puntos: 8
Respuesta: se puede instanciar adentro de una clase en php

Todo depende del tipo de relación que exista... lee sobre diseño orientado a objeto
  #9 (permalink)  
Antiguo 29/03/2014, 14:43
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 13 años, 1 mes
Puntos: 8
Respuesta: se puede instanciar adentro de una clase en php

Cita:
Iniciado por oscard41 Ver Mensaje
Todo depende del tipo de relación que exista... lee sobre diseño orientado a objeto
no entiendo lo que me quieres decir, de que depende
o cual es la diferencia entre llamar directo o hacerlo por una palabra clave
como extends
  #10 (permalink)  
Antiguo 29/03/2014, 15:28
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 12 años, 5 meses
Puntos: 8
Respuesta: se puede instanciar adentro de una clase en php

Imagina que tienes una clase llamada "Figura" y posees otras dos clases llamadas "FiguraBidimensional" y "FiguraTridimensional" esas dos clases SON Figuras independientemente si son bidimensionales o tridimensionales entonces deben de extender de la clase "Figura"

ahora tienes otra clase llamada "circulo", el circulo es una figura bidimensional entonces debe de extender de la clase "Figurabidimensional " que a su ves extiende de la clase "Figura" puesto que la clase Figurabidimensional extiende de Figura

ahora imagina que quieres asignar un color a ese circulo entonces tienes una clase llamada "Color"


la clase "circulo" no la vas a extender de la clase color puesto que un circulo NO ES un color pero si tiene un color entonces en este caso la clase circulo va a tener como atributo un objeto "Color"

que fue lo que te explico hhs


Lee, busca información sobre diseño orientado a objeto.

Etiquetas: clase, instanciar
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 15:12.