Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/06/2014, 06:13
Avatar de jor_0203
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.