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 :
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
   }
 
}
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
 
include 'PCXML.php';
 
$xml = PCXML :: chargerFichier('test.xml');
 
var_dump($xml);
Voila le résultat :
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) { } } }
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 :

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 :

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');
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.

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