[Système] Exception et fichier/ligne
Bonjour,
Je suis entrain de développer une petite classe pour gérer les requetes SQL et traiter les erreurs possibles.
J'ai donc fait une classe SQLManager :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php
class SQLManager {
function SQLManager() {
}
function query($sql) {
try {
$req = @ pg_query($sql);
if ($req == false) {
$code = 0;
$message = pg_last_error();
throw new DatabaseQueryException($message, $code);
}
} catch (DatabaseQueryException $e) {
echo "Capture de l'exception : ", $e, "\n";
}
}
}
?> |
J'ai aussi fait une classe DatabaseQueryException :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class DatabaseQueryException extends Exception {
protected $message;
public function DatabaseQueryException($message, $code) {
$this->message = $message;
parent::__construct($message, $code);
}
public function __destruct() {
unset($this->message);
}
public function __toString() {
$this->__destruct();
$error = $this->getFile();
$error .= ' ';
$error .= $this->getLine();
$error .= ' ';
$error .= $this->message;
return $error;
}
} |
J'ai ensuite voulu tester tout ça avec un fichier test.php contenant notamment :
Code:
1 2 3 4 5
| $sql = "SELECT usr_emailtt FROM d_user";
$s = new SQLManager();
$s->query($sql); |
La requete retourne volontairement une erreur, qui est bien géré par mes classe.
Le PROBLEME est que la ligne et le fichier rapportés dans le message d'exception sont le fichier SQLManager et la ligne où on attrape l'exception.
Alors que moi je veux que l'exception me dise que l'erreur se trouve dans le fichier test.php à la ligne ou je fais $s->query($sql);.
Avec __LINE__ et __FILE__ le problème est le même (même si c'est logique).
J'aimerai au maximum externaliser les traitements et la gestion des erreurs dans mes deux classes plutôt que d'entourer de try/catch toutes mes requetes de mon code.
Existe-il une fonction pour connaitre depuis quel fonction/fichier est appelé une autre fonction ?
Par exemple connaître dans ma fonction query de ma classe SQLManager, depuis quel fichier/fonction elle est appelée pour pouvoir la passer à mon exception.
Merci d'avance pour votre aide