Foros del Web » Programando para Internet » PHP »

en php también podemos llamar clases desde métodos?

Estas en el tema de en php también podemos llamar clases desde métodos? en el foro de PHP en Foros del Web. en php también podemos llamar clases desde métodos? es decir estoy aprendiendo java y me he dado cuenta que adentro de un método en los ...
  #1 (permalink)  
Antiguo 27/06/2014, 04:03
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
en php también podemos llamar clases desde métodos?

en php también podemos llamar clases desde métodos?
es decir estoy aprendiendo java y me he dado cuenta que adentro de un
método en los paréntesis usan una clase creo ya que no entiendo muy bien
por ejemplo

En la clase main de java hay un método por ejemplo
prueba(Clase dato){}// esto lo he visto en java

mi pregunta esto existe en php
por ejemplo

function prueba(Clase $dato){}

1-¿tengo una pregunta para que se usa esto, es decir no tengo ni idea, pienso que es una clase y una variable, pero realmente que se quiere hacer?
  #2 (permalink)  
Antiguo 27/06/2014, 05:24
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: en php también podemos llamar clases desde métodos?

Eso no es una "llamada a clase desde metodo"
Eso es la especificación del tipo de parámetro en la signature del método, ya que java es tipado.Cualquier variable tiene que especificar su tipo de dato, y eso incluye los parámetros que recibe un método.
En PHP puedes hacerlo (type hinting), pero mientras en java existe chequeo real de tipos, y el chequeo se hace en tiempo de compilación, en php no existe este chequeo.Sólo es una "ayuda", especialmente para los IDEs.
  #3 (permalink)  
Antiguo 27/06/2014, 05:33
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 php también podemos llamar clases desde métodos?

Recientemente he aprendido a utilizar esto para hacer lo que yo llamo (no sé si tiene un nombre específico) una llamada ciega a clases.

Lo aprendí cuando me enseñaron a crear un front controller.

Por ejemplo.

Supongamos que queremos hacer un front-controller donde el usuario, al introducir un parámetro en la barra de direcciones instancie directamente a una clase.

Para esto debemos recoger ese parámetro, que es el nombre de una clase.

Y el código podría ser algo así

Código PHP:
Ver original
  1. $class=$_GET['class']
  2.  
  3. $obj=(new FrontController())->instance($class);

En el front-controller habría un código tal que así

Código PHP:
Ver original
  1. class FrontController{
  2.  
  3. function __construct(){
  4.  
  5. }
  6.  
  7. function instance($class){
  8. include $class'.php';
  9. //retorna la pagina principal
  10.  
  11. return (new $class())->view();
  12. }
  13. }

De manera que si el usuario introduce index.php?class=home imprimirá el home.

Evidentemente faltan detalles como los namespaces, autocarga de clases con spl_autoload_register, modificar el htaccess para que el usuario no tenga necesidad de indicar index.php y tampoco class= y que la url solo admita parámetros con "/", etc.

Pero en esencia esa es la idea, instanciar ciegamente clases.
__________________
Ayúdame a hacerlo por mi mismo.
  #4 (permalink)  
Antiguo 27/06/2014, 06:02
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 php también podemos llamar clases desde métodos?

Cita:
Iniciado por dashtrash Ver Mensaje
Eso no es una "llamada a clase desde metodo"
Eso es la especificación del tipo de parámetro en la signature del método, ya que java es tipado.Cualquier variable tiene que especificar su tipo de dato, y eso incluye los parámetros que recibe un método.
En PHP puedes hacerlo (type hinting), pero mientras en java existe chequeo real de tipos, y el chequeo se hace en tiempo de compilación, en php no existe este chequeo.Sólo es una "ayuda", especialmente para los IDEs.
y entonces como se usa esto
es decir como seria un ejemplo
porque según yo cuando usamos la primer letra mayúscula
es una clase entonces esto como lo utilizan ya que no me queda claro

function prueba(Clase $dato){}
  #5 (permalink)  
Antiguo 27/06/2014, 06:13
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 php también podemos llamar clases desde métodos?

Cita:
Iniciado por guardarmicorreo Ver Mensaje
Recientemente he aprendido a utilizar esto para hacer lo que yo llamo (no sé si tiene un nombre específico) una llamada ciega a clases.

Lo aprendí cuando me enseñaron a crear un front controller.

Por ejemplo.

Supongamos que queremos hacer un front-controller donde el usuario, al introducir un parámetro en la barra de direcciones instancie directamente a una clase.

Para esto debemos recoger ese parámetro, que es el nombre de una clase.

Y el código podría ser algo así

Código PHP:
Ver original
  1. $class=$_GET['class']
  2.  
  3. $obj=(new FrontController())->instance($class);

En el front-controller habría un código tal que así

Código PHP:
Ver original
  1. class FrontController{
  2.  
  3. function __construct(){
  4.  
  5. }
  6.  
  7. function instance($class){
  8. include $class'.php';
  9. //retorna la pagina principal
  10.  
  11. return (new $class())->view();
  12. }
  13. }

De manera que si el usuario introduce index.php?class=home imprimirá el home.

Evidentemente faltan detalles como los namespaces, autocarga de clases con spl_autoload_register, modificar el htaccess para que el usuario no tenga necesidad de indicar index.php y tampoco class= y que la url solo admita parámetros con "/", etc.

Pero en esencia esa es la idea, instanciar ciegamente clases.

realmente esta genial lo que haces, pero sigo preguntando esto
yo se que cuando hay una mayúscula al comienzo es una clase
y si en un método hay entre los paréntesis por así decir (Class $dato)
entiendo que el método puede llamar a una clase según yo.

es decir el código seria así

function prueba(Clase $dato){

$f=$dato;
}

esto lo usan mucho en java para programación objetos, pero no se como se usa esto, ni lo entiendo y es mas no se si se pueda en php.
  #6 (permalink)  
Antiguo 27/06/2014, 08:03
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: en php también podemos llamar clases desde métodos?

Cita:
esto lo usan mucho en java para programación objetos, pero no se como se usa esto, ni lo entiendo y es mas no se si se pueda en php.
Jejejeje Peladito y en la boca: Jor_0203 para esa duda solo necesitas el manual, tu interprete de php, ejecutar el ejemplo y usar el sentido común para deducir por ti mismo si se puede o no.
Vamos despeja tu curiosidad probando, es divertido.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 27/06/2014, 09:06
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: en php también podemos llamar clases desde métodos?

Cita:
Iniciado por jor_0203 Ver Mensaje
y entonces como se usa esto
Como se usa...el qué?
Me parece que no tienes clara la diferencia entre clase, instancia, y cómo se declaran:

class xx {} <---- declaracion de una clase
$a = new xx() <---- creacion de una instancia de la clase
xx $a <--- En PHP, "notifico" que la variable $a va a usarse como una instancia de xx. Si luego metes otra cosa (una cadena, por ejemplo), a PHP le da igual.En Java, esto es una declaración de una instancia de la clase xx, estás obligado a especificarlo, y si se te ocurre asignarle algo que no sea una instancia de xx, te va a dar un error en tiempo de compilación.

Eso no se "usa".Eso es un requisito del lenguaje de programación, no una "feature" de la que vayas a hacer uso en tiempo de ejecución.

Cita:
porque según yo cuando usamos la primer letra mayúscula es una clase
Tú lo has dicho, "según tú".
En PHP sólo se requiere que se declaren las *clases*, no las instancias, porque no es un lenguaje tipado.
En Java, hay que declarar tanto las clases, como las instancias.
Si estás aprendiendo Java y estás pensando en "esto como funciona en PHP", te vas a liar mucho, sobre todo, si no tienes claros esos conceptos básicos.
  #8 (permalink)  
Antiguo 27/06/2014, 14:59
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 php también podemos llamar clases desde métodos?

Cita:
Iniciado por dashtrash Ver Mensaje
Como se usa...el qué?
Me parece que no tienes clara la diferencia entre clase, instancia, y cómo se declaran:

class xx {} <---- declaracion de una clase
$a = new xx() <---- creacion de una instancia de la clase
xx $a <--- En PHP, "notifico" que la variable $a va a usarse como una instancia de xx. Si luego metes otra cosa (una cadena, por ejemplo), a PHP le da igual.En Java, esto es una declaración de una instancia de la clase xx, estás obligado a especificarlo, y si se te ocurre asignarle algo que no sea una instancia de xx, te va a dar un error en tiempo de compilación.

Eso no se "usa".Eso es un requisito del lenguaje de programación, no una "feature" de la que vayas a hacer uso en tiempo de ejecución.


Tú lo has dicho, "según tú".
En PHP sólo se requiere que se declaren las *clases*, no las instancias, porque no es un lenguaje tipado.
En Java, hay que declarar tanto las clases, como las instancias.
Si estás aprendiendo Java y estás pensando en "esto como funciona en PHP", te vas a liar mucho, sobre todo, si no tienes claros esos conceptos básicos.
mira ve este ejemplo y entenderás lo que dijo

Código PHP:
Ver original
  1. Class Prueba {
  2.        public $prueba_de_ciclismo;
  3.        public $puntaje;
  4.        define __construct () {
  5.             $this->prueba_de_ciclismo = "realizada";
  6.             $this->puntaje = "8";
  7.       }
  8. }
  9.  
  10. Class Pruebas {
  11.       private $me_gusta;
  12.  
  13.      define __construct(Prueba $prueba) {
  14.            if ($prueba->puntaje > 5) {
  15.                 $this->me_gusta = "si";
  16.                 } else {
  17.                 $this->me_gusta = "no";
  18.           }
  19.           echo "La prueba de ciclismo" . $prueba->prueba_de_ciclismo - " " . $this->me_gusta . " me gusta";
  20.      }
  21. }

fíjate que prueba según yo es una clase (Prueba $prueba)
pero no entiendo el como se usa

es decir busco el como se usa esto cuando en un método haya una clase
gracias
  #9 (permalink)  
Antiguo 27/06/2014, 15:09
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: en php también podemos llamar clases desde métodos?

Cita:
Iniciado por jor_0203 Ver Mensaje
fíjate que prueba según yo es una clase (Prueba $prueba)
pero no entiendo el como se usa

En PHP 5.x es posible "forzar tipos" pero no cualquier tipo (no-integer, no-string...) solo instancias.

Y notablemente hay otro caso particular..... es posible forzar tambien arrays a pesar de no ser instancias de ninguna clase Array ni nada parecido

Código PHP:
Ver original
  1. <?php
  2.  
  3. $a = array (2,"algo");
  4.  
  5. function do_someting (array $a)
  6. {
  7.     var_dump($a);
  8. }
  9.  
  10. do_someting($a);  // intenta enviar 'algo' y dara error
__________________
Salu2!
  #10 (permalink)  
Antiguo 27/06/2014, 15:27
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 php también podemos llamar clases desde métodos?

Cita:
Iniciado por Italico76 Ver Mensaje
En PHP 5.x es posible "forzar tipos" pero no cualquier tipo (no-integer, no-string...) solo instancias.

Y notablemente hay otro caso particular..... es posible forzar tambien arrays a pesar de no ser instancias de ninguna clase Array ni nada parecido

Código PHP:
Ver original
  1. <?php
  2.  
  3. $a = array (2,"algo");
  4.  
  5. function do_someting (array $a)
  6. {
  7.     var_dump($a);
  8. }
  9.  
  10. do_someting($a);  // intenta enviar 'algo' y dara error
pero sigo sin entender
como se usa esto (Prueba $prueba)segun el ejemplo que te di
gracias
  #11 (permalink)  
Antiguo 27/06/2014, 15:32
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: en php también podemos llamar clases desde métodos?

Bueno... para empezar el constructor es una FUNCION

Código PHP:
Ver original
  1. <?php
  2.  
  3. Class Prueba
  4. {  
  5.     // ..
  6. }
  7.  
  8. Class Pruebas
  9. {    
  10.     public function __construct(Prueba $prueba)
  11.     {    
  12.         // ..
  13.     }
  14. }

y luego ...

Código PHP:
Ver original
  1. $prueba = new prueba();
  2. $pruebas = new pruebas($prueba);
Y desde PHP 5.4 puedes hacer esto:

Código PHP:
Ver original
  1. $pruebas = new pruebas(new prueba());




IMPORTANTE:

El nombre de la clase por lo general es en Singular y no tiene mucho sentido tener una clase llamada Prueba y otra Pruebas..... por lo mismo
__________________
Salu2!
  #12 (permalink)  
Antiguo 27/06/2014, 16:01
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 php también podemos llamar clases desde métodos?

Cita:
Iniciado por Italico76 Ver Mensaje
Bueno... para empezar el constructor es una FUNCION

Código PHP:
Ver original
  1. <?php
  2.  
  3. Class Prueba
  4. {  
  5.     // ..
  6. }
  7.  
  8. Class Pruebas
  9. {    
  10.     public function __construct(Prueba $prueba)
  11.     {    
  12.         // ..
  13.     }
  14. }

y luego ...

Código PHP:
Ver original
  1. $prueba = new prueba();
  2. $pruebas = new pruebas($prueba);
Y desde PHP 5.4 puedes hacer esto:

Código PHP:
Ver original
  1. $pruebas = new pruebas(new prueba());




IMPORTANTE:

El nombre de la clase por lo general es en Singular y no tiene mucho sentido tener una clase llamada Prueba y otra Pruebas..... por lo mismo
pero la pregunta como se usa y para que lo usan
esto public function __construct(Prueba $prueba) ya que puedes ser public function comprar(Prueba $prueba) es decir puede ser contrutor o no construtor eso lo entiendo, pero lo que no entiendo es cuando meten en el metodo el nombre de una clase, eso como se usa, ya que no se ni tengo idea
gracias
  #13 (permalink)  
Antiguo 27/06/2014, 16:04
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: en php también podemos llamar clases desde métodos?

Asi tu aplicacion sera mas "robusta" y te ahorras andar preguntando si ese parameteo es una instancia de tal o cual clase.
__________________
Salu2!
  #14 (permalink)  
Antiguo 27/06/2014, 19:37
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 php también podemos llamar clases desde métodos?

Cita:
Iniciado por Italico76 Ver Mensaje
Asi tu aplicacion sera mas "robusta" y te ahorras andar preguntando si ese parameteo es una instancia de tal o cual clase.
creo que ya me entendiste un poco
entiendo lo que me dices
pero no entiendo como se usa por ejemplo
class Trabajo{
funtion prueba(Casa $recibe){}
}

si te das cuenta en el metodo hay una clase a dentro
la pregunta y eso para que, que gano, es decir toda las clase Casa
esta dentro de un método prueba

o para que llamo a la clase Casa que esta dentro de la clase Trabajo
  #15 (permalink)  
Antiguo 27/06/2014, 19:57
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 php también podemos llamar clases desde métodos?

Cuando en un método tengo una clase a dentro como se usa por ejemplo

Class Trabajo{ funtion prueba(Casa $recibe){} }

Class Casa{ funtion carro(){ echo "carro";} }

yo he visto gente que pone en los métodos clases, pero no entiendo el para que sirve,es decir; si yo meto la clase en un método de la otra clase llamo a todas las clases del otro método o para que lo pongo.

No entiendo su uso
  #16 (permalink)  
Antiguo 27/06/2014, 20:09
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: en php también podemos llamar clases desde métodos?

No metes ninguna clase adentro de un metodo, sino dices que el "tipo de dato" que recibe ese metodo es una instancia de una clase en particular.

Por ejemplo.......

Código PHP:
Ver original
  1. Class Pregunta
  2. {
  3.    // ..
  4. }
  5.  
  6. Class Cuestionario
  7. {
  8.     private $preguntas = array();
  9.    
  10.     function addPregunta(Pregunta $p)
  11.     {
  12.         $this->preguntas[] = $p;
  13.     }
  14. }


Entiendes la ventaja de decir que solo ese metodo debe aceptar solo preguntas y no naranjas o pelotas de basquet ?

En PHP es una ventaja pero en lenguajes compilados es obligacion declarar variables inclusive en los parametros de las funciones porque el compilador necesita esa informacion para generar el "ejecutable" (o un bytecode en el caso de Java)
__________________
Salu2!

Última edición por Italico76; 27/06/2014 a las 20:17
  #17 (permalink)  
Antiguo 27/06/2014, 20:20
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 php también podemos llamar clases desde métodos?

Cita:
Iniciado por Italico76 Ver Mensaje
No metes ninguna clase adentro de un metodo, sino dices que el "tipo de dato" que recibe ese metodo es una instancia de una clase en particular.

Por ejemplo.......

Código PHP:
Ver original
  1. Class Pregunta
  2. {
  3.    // ..
  4. }
  5.  
  6. Class Cuestionario
  7. {
  8.     private $preguntas = array();
  9.    
  10.     function addPregunta(Pregunta $p)
  11.     {
  12.         $this->preguntas[] = $p;
  13.     }
  14. }


Entiendes la ventaja de decir que solo ese metodo debe aceptar solo preguntas y no naranjas o pelotas de basquet ?

En PHP es una ventaja pero en lenguajes compilados es obligacion declarar variables inclusive en los parametros de las funciones porque el compilador necesita esa informacion para generar el "ejecutable" (o un bytecode en el caso de Java)

exacto eso es lo que pregunto
y como se le llama a esto
  #18 (permalink)  
Antiguo 27/06/2014, 20:25
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: en php también podemos llamar clases desde métodos?

Type hinting
__________________
Salu2!
  #19 (permalink)  
Antiguo 28/06/2014, 03:25
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: en php también podemos llamar clases desde métodos?

Cita:
Iniciado por jor_0203 Ver Mensaje
exacto eso es lo que pregunto
y como se le llama a esto
Todo lo que tienes es "eso" que quieres "usar", te lo respondí en el primer reply.A partir de ahí, ten en cuenta que no es que no entendamos lo que preguntas.Es que no entiendes las respuestas.
  #20 (permalink)  
Antiguo 28/06/2014, 07:08
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: en php también podemos llamar clases desde métodos?

Cita:
Iniciado por dashtrash Ver Mensaje
Todo lo que tienes es "eso" que quieres "usar", te lo respondí en el primer reply.A partir de ahí, ten en cuenta que no es que no entendamos lo que preguntas.Es que no entiendes las respuestas.


Lo mas divertido es que tiene un hilo donde pregunta lo mismo en el foro de Java
__________________
Salu2!
  #21 (permalink)  
Antiguo 28/06/2014, 13:29
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: en php también podemos llamar clases desde métodos?

No es nada extraño, este usuario siempre hace lo mismo. Tiene un largo historial con ese patron
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: clases, variable
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:55.