Bonjour bonjour,
Comme le titre du message ne l'explique peut être pas tout à fait clairement, j'essaie d'instancier un objet dans une autre classe et j'ai un soucis...
J'explique, j'ai une classe qui gère les écritures au sein d'un fichier xml, xmlManager, elle marche parfaitement.
et j'ai mon autre classe, qui hérite de PDO et dans laquelle j'aimerai instancié un objet du type xmlManager, afin de pouvoir consigner dans un journal au format xml les requêtes, les erreurs etc... sans m'en préoccuper, c'est à dire en manipulant un objet PDO normal, la journalisation en plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class xmlManager { private $document; public function __construct ($parametre1, $parametre2, ...) { $this->document = new DomDocument(); } public function addMessage($message) { //ajoute un message à l'arbre XML } public function saveMessages() { $this->document->save($myfile); } }
Mon problème est le suivant : si une exception se déclenche (si je met un mauvais mot de pass par exemple et qu'il n'arrive pas à se connecter à la base de données), je reçoit un message du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class PDOjournalise extends PDO { private $log; public function __construct() { $this->log = new xmlManager; try { $dbObject = parent::__construct($dns,$username,$password); $message = 'Connection réussie !'; } catch (PDOException $exection){ $message = 'Echec de la connection :'.$exception->getMessage(); } $this->log->addMessage($message); return $dbObject; } public function __destruct() { $this->log->addMessage('Fermeture du lien !'); $this->log->saveMessages(); } }
alors que si il n'y a pas d'exception, tout marche parfaitement.Fatal error: Call to a member function addMessage() on a non-object in c:\mon_dossier\PDOjournalise.class.php on line XX
J'ai fait des tests avec cette fonction là comme constructeur :
Je récupère dans ce cas le même message, à ceci près que le numéros de ligne correspond ce coup ci à l'appel suivant de $this->log->addMessage, appel qui a lieu dans une autre fonction de la classe (dans le destructeur par ex)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public function __construct() { $log = new xmlManager; try { $dbObject = parent::__construct($dns,$username,$password); $message = 'Connection réussie !'; } catch (PDOException $exection){ $message = 'Echec de la connection :'.$exception->getMessage(); } $log->addMessage($message); $this->log = $log; return $dbObject; }
Voilà, ça fait 4 heure que je cherche dans tous les sens, que j'essai des trucs pas possible (à noter qu'une solution serais de stocker les message dans un tableau, et de tous les ajouter à la fin, mais j'aimerai bien savoir pourquoi ça marche pas quand même...). Je suis en train de craquerC'est d'autant plus bizarre quand la classe xmlManager, j'ai pus instancier un objet Domdocument et le stocker dans un attributs sans qu'il râle :/
Merci de m'avoir lut jusqu'au bout
PS : question subsidiaire, est ce que le return $dbObject; est nécessaire dans le constructeur de la classe PDOjournalise ?
Partager