Bonjour à tous,
Je me heurte à un petit problème que je ne comprend pas. Selon la documentation de SimpleXML, le fonction simple_xml_load_file() possède un paramètre facultatif "class_name" qui, si je le renseigne, me permet de récupérer un objet de la classe que je veux tant qu'elle étend SimpleXMLElement.
J'ai donc une classe PCXML qui étend SimpleXMLElement. Voici la signature de ma classe :
J'utilise alors ce petit bout de code pour tester mon code :
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 class PCXML extends SimpleXMLElement { // Méthodes de la classe public static function chargerFichier ($fichierXML) { return simple_xml_load_file($fichierXML, 'PCXML'); } public function save () { // Traitement qui me permet de sauvegarder dans un fichier } protected function debug () { // Traitement qui me permet de laisser des traces } }
Voila le résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 include 'PCXML.php'; $xml = PCXML :: chargerFichier('test.xml'); var_dump($xml);
Je me dit alors que tout va bien. Et malheureusement je me trompe. Lorsque j'essaye d'utiliser les méthodes debug() ou save() j'obtiens ce jolie message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part object(PCXML)#1 (1) { ["QA"]=> object(PCXML)#2 (2) { ["@attributes"]=> array(1) { ["id"]=> string(1) "1" } ["libelle"]=> object(PCXML)#3 (0) { } } }
Fatal error: Call to a member function debug() on a non-object in C:\wamp\www\************\PCXML.php on line 67
Déjà je ne comprend pas puisque que je récupère un objet de la bonne classe.
J'essaye alors de charger mon fichier XML à l'extérieur de ma classe :
Avec le var_dump(), je vois que je récupère encore un objet de la bonne classe mais j'obtiens toujours la même erreur lorsque j'utilise une méthode de la classe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 include 'PCXML.php'; $xml = simple_xml_load_file('test.xml', 'PCXML'); var_dump($xml); $xml->save('saveTest.xml');
Je ne comprend pas du tout pourquoi et surtout, je ne vois plus l'intérêt de ce paramètre facultatif si ce n'est pas d'utiliser des méthodes de sa propre classe.
Un petit coup de main svp![]()







Répondre avec citation
Partager