Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/04/2014, 10:29
quico5
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
is_readable - is_callable - call_user_func - call_user_func_array

Estoy creando mi propio Framework, basado en una guía, tengo entendido que (is_readable y is_callable) se usan mas bien para APIs y que en mi caso no serian necesarias, me gustaría saber cual es la forma más adecuada en mi caso, gracias

(call_user_func - call_user_func_array) Tambien tengo interes por estas dos y si son las mas adecuadas, gracias

Código PHP:
<?php
    
/*LLAMA-CONTROLADORES-METODOS*/
    
class Bootstrap {
        public static function 
run(Request $peticion) { //Recogemos Controlador/Metodo/Argumentos de application/Request.php
            
$controlador $peticion->getControlador().'Controller'//Controlador pedido
            
$rutaControlador ROOT.'controllers'.DS.$controlador.'.php'//Ruta del Controlador pedido
            
$metodo $peticion->getMetodo(); //Metodo pedido
            
$args $peticion->getArgs(); //Argumentos pedidos

            
if (is_readable($rutaControlador)) { //Comprobamos que exista y sea legible el Controlador
                
require_once $rutaControlador//Cargamos el controlador
                
$controlador = new $controlador(); //Instanciamos la Clase en un Objeto

                
if (is_callable(array($controlador$metodo))) { //Verifica que los contenidos de una variable puedan ser llamados como una función
                    
$metodo $peticion->getMetodo(); //Devolvemos el Metodo pedido
                
} else {
                    
$metodo 'index'//Devolvemos el Metodo por defecto
                
}

                if (isset(
$args)) { //Comprobamos que existan los Argumentos
                    //Llamar una función de usuario dada con una matriz de parámetros
                    
call_user_func_array(array($controlador$metodo), $args);
                } else {
                    
//Llamar a una llamada de retorno dada por el primer parámetro
                    
call_user_func(array($controlador$medoto));
                }
            } else {
                
//Informamos que no existe la Ruta del Controlador
                
throw new Exception('No existe el Controlador: \'controllers/'.$controlador.'.php\'');
            }
        }
    }
?>