IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Paramètre de simple_xml_load_file()


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Par défaut [SimpleXML] Paramètre de simple_xml_load_file()
    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

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 715
    Par défaut
    j'ai essayé ton code et j'ai eu des autres erreurs mais une fois corrigées, ce code fonctionne comme tu veux :
    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
    23
    24
    25
    26
    <?php
     
    class PCXML extends SimpleXMLElement
    {
        // Méthodes de la classe
        public static function chargerFichier($fichierXML)
        {
            return simplexml_load_file($fichierXML, 'PCXML');
        }
     
        public function save()
        {
            var_dump($this);
        }
     
        protected function debug ()
        {
            // Traitement qui me permet de laisser des traces
        }
     
    }
     
    header('Content-type: text/plain');
     
    $xml = PCXML::chargerFichier('test1.xml');
    $xml->save('saveTest.xml');

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Par défaut
    Merci pour cette rapide réponse.
    Mais en fait le problème ne venait pas du tout d'où je pensait.

    En réalité, pour faire mon debug, j'utilise une classe perso. Mais comme la classe SimpleXMLElement n'est pas de moi ^^, je n'est donc pas pu récupérer l'instance de mon gestionnaire de log. Je faisais à chaque fois le debug avant le save et je pensais pas que sa venais de sa, par reflexe, vu que normalement je fait tout dans le constructeur de la classe abstraite.

    J'avoue que je me sens bête lol

    Merci quand même sa ma mis la puce à l'oreille

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SimpleXML] simplexml_load_file petit soucis de paramètre
    Par snipes dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/09/2007, 12h11
  2. [xmlrad] Pb de paramètre ?
    Par Pm dans le forum XMLRAD
    Réponses: 7
    Dernier message: 07/01/2003, 15h37
  3. [SWT] Problème de paramètre GridData
    Par yolepro dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 06/12/2002, 11h37
  4. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 20h47
  5. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo