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

Clase AutoLoad

Estas en el tema de Clase AutoLoad en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Hice la siguiente clase AutoLoad Código PHP: class  AutoLoad  {     public function  __construct () {     }                  public static function  registerAutoload () {                      spl_autoload_register (array( 'AutoLoad' ,  'autoload' ...
  #1 (permalink)  
Antiguo 20/10/2008, 09:12
GPS
 
Fecha de Ingreso: diciembre-2003
Ubicación: Montevideo, Uruguay
Mensajes: 110
Antigüedad: 20 años, 4 meses
Puntos: 0
Clase AutoLoad

Hola
Hice la siguiente clase AutoLoad

Código PHP:
class AutoLoad {

    public function 
__construct() {
    }    
        
    public static function 
registerAutoload() {            
        
spl_autoload_register(array('AutoLoad''autoload'));            
    }
    
    public static function 
autoload$class_name ) {
    
        if ( 
preg_match('/.controller.php/i'$class_name) ) {
            
$path CONTROLLER_PATH;
            
$type 'controller';
            
        } elseif ( 
preg_match('/.model.php/i'$class_name) ) { 
            
$path MODEL_PATH;
            
$type 'model';
        
        } else {
            
$path CORE_PATH;
            
$type 'class';
        }
        
        
$file $path $class_name '.' $type '.php';
        
        if ( 
file_exists($file) ) {                    
            require_once 
$file;
            
        } else {
            throw new 
Exception('La clase ' $class_name ' no existe');
        } 
        
    }


Funciona bien, el problema esta cuando dentro de una clase quiero instanciar otra, por ej. desde una clase controladora instaciar un modelo, ahi no funciona el autoload.

Cual seria la forma mas facil de solucionar esto?

Una solucion que se me ocurrio es a cada clase controller, extenderla a una clase GenericController por ej y que en el consturctor de esta se realice el autoload
  #2 (permalink)  
Antiguo 20/10/2008, 09:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Clase AutoLoad

Cuando dices que no funciona a que te refieres exactamente? Que error te indica o te marca?

Saludos.
  #3 (permalink)  
Antiguo 20/10/2008, 09:21
GPS
 
Fecha de Ingreso: diciembre-2003
Ubicación: Montevideo, Uruguay
Mensajes: 110
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Clase AutoLoad

"Fatal error: Class 'ProductModel' not found in..."
Ni siquiera me arroja la exception
  #4 (permalink)  
Antiguo 20/10/2008, 09:43
GPS
 
Fecha de Ingreso: diciembre-2003
Ubicación: Montevideo, Uruguay
Mensajes: 110
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Clase AutoLoad

Listo ya lo pude solucionar, tenia un error yo en las expresiones regulares
  #5 (permalink)  
Antiguo 20/10/2008, 10:08
GPS
 
Fecha de Ingreso: diciembre-2003
Ubicación: Montevideo, Uruguay
Mensajes: 110
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Clase AutoLoad

Lo que no me esta andando es la excepcion...

Este es el codigo que tengo en el index.php de mi aplicacion

Código PHP:
try { 
    
// Cargo autoload para la importacion automatica de clases
    
require_once(CORE_PATH 'autoLoad.class.php');
    
AutoLoad::registerAutoload();    
    
    
// Intento despachar la accion
    
FrontControl::dispatch();     
}

// Recojo el error si lo hay
catch (Exception $e) {
    echo 
$e->getMessage() . "\n";

Si no encuentra una clase el autoload me da un "Fatal Error" en lugar de imprimir la excepcion.

Alguna idea?
  #6 (permalink)  
Antiguo 20/10/2008, 11:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Clase AutoLoad

Hola GPS,

Si te fijas en el manual de PHP explicitamente especifica que no puedes lanzar excepciones en un autoload.

Saludos.
  #7 (permalink)  
Antiguo 20/10/2008, 11:31
GPS
 
Fecha de Ingreso: diciembre-2003
Ubicación: Montevideo, Uruguay
Mensajes: 110
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Clase AutoLoad

GatorV gracias por la respuesta, se me habia pasado el detalle
Saludos
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 06:56.