Newsgroup: it.comp.www.php
Titolo: autoload exception

salve a tutti, 
ho un problema con l'autoload delle classi per le eccezioni in php. 
Mi spiego meglio: ho creato una funzione autoload, registrata con spl_autoload_register che mi carica automaticamente le classi e anche le classi usate per le eccezioni, eseguendo un alias in quanto le classi vengono chiamate da diversi script con namespace diverso da quello delle classi. Il tutto funziona correttamente finchè sollevo l'eccezione, mentre sorge il problema dentro il costrutto try catch quando tento di gestirla, in quanto non viene invocato l'autoload e di conseguenza non trova la classe con la quale è stata sollevata.
 
Ringrazio tutti per l'aiuto :)


Scusa, fammi capire com'è il codice
 
è così?
try{
$class= new Class();
} catch (\Exception $e){
error_log($e->getMessage());
$classb = new Classb();
}
 
Nel qual caso hai provato a usare un finally ?
 
Il manuale non fa riferimento ad usi particolari dentro un try catch
 
-- 
I fatti mi cosano

Il giorno venerdì 20 settembre 2013 10:48:15 UTC+2, Marco Albarelli ha scritto:

no il codice è così
 
try{
 
$class= new Class();
 
} catch (MiaException $e){
 
error_log($e->getMessage());
 
$classb = new Classb(); 
 
}
 
dove MiaException è
 
class MiaException extends \Exception {
 
}
 
il tutto senza usare use per "importare" la classe nel namespace dove viene eseguito il try-catch
 
quando la sollevo funziona, quindi il codice seguente viene eseguito correttamente
 
throw new MiaException("errore");
 
in quanto php non trovando MiaException richiama l'autoload che la carica e attraverso un class_alias la rendo disponibile all'interno del namespace dove viene sollevata l'eccezione.
 
Invece nel try-catch non viene invocato l'autoload e quindi php mi dice che non trova la classe MiaException.
 
Spero di essermi spiegato meglio


 
Sì, credo di aver capito
In pratica il problema è sulla exception, giusto?
 
C'è un motivo per cui non vuoi usare gli use?


 che non trova la classe MiaException.
 
Non riesco a riprodurre il tuo errore, ma secondo me il problema grosso è 
il class_alias che usi.
 
Toglilo e usa le eccezioni col loro nome e namespace, e dovrebbe 
funzionare tutto.
 
Bye.

Ciao, allora non voglio usare gli use perchè le classi dovrebbero crearsi dinamicamente (sto creando un framework).
 
Il problema non è nel class_alias in quanto ho verificato che non viene proprio chiamata la funzione di autoload (un semplice echo quando viene chiamata).
 
Ho aggirato temporaneamente il problema usando Exception senza le classi figlie ma mi piacerebbe riuscire usandole.
 
Grazie

 chiamata).
 
Come ho detto, ci ho provato, e l'autoload viene chiamato senza problemi, 
anche con classi derivate.
 
Bye.


Ciao allora l'autoload funziona con tutto tranne quella classe e il sistema che creo è tutto con i namespace, le eccezioni servono per determinate classi (come quella per accedere al db) il problema è che non viene chiamato l'autoload solo dentro la clausola catch, per il resto funziona perfettamente tutto.
 
Ho fatto anche delle prove con un autoload senza alias ed effettivamente non viene chiamato solo dentro la clausola catch.