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

Langage PHP Discussion :

Caster un object en un object hérité


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Points : 54
    Points
    54
    Par défaut Caster un object en un object hérité
    Bonjour,

    J'ai une class "mySXE" qui hérite de SimpleXMLElement. En voici un court résumé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class mySXE extends SimpleXMLElement {
     
    		public function getParentNode() {
    			$noeud_DOM = dom_import_simplexml($this);
    			$noeudParent_DOM = $noeud_DOM->parentNode;
    			return simplexml_import_dom($noeudParent_DOM);
    		}
    	}
    Mon problème est que quand je veux accèder au noeud parent comme suit, je récupère un object SimpleXmlElement alors que j'aimerais récupérer un object mySXE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	// $noeudMySXE est un object mySXE
    	$noeudParent = $noeudMySXE->getParentNode();
    Du coup, si je veux récupérer le père de $noeudParent, je ne peux plus utiliser ma fonction getParentNode() puisque $noeudParent est un object de type SimpleXMLElement (et non mySXE)

    J'ai essayé de forcer en faisant un cast comme suit, mais bien évidement celà n'est pas possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $noeudParent = (mySXE)$noeudMySXE->getParentNode();
    Comment puis-je procéder?
    Gregco

  2. #2
    Membre averti Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Points : 336
    Points
    336
    Par défaut
    je viens de voir que dans la doc de "simplexml_import_dom" il est préciser qu'il retourne un élément natif de SimpleXML
    peut-être que le problème vient de là, mais comment le contourner c'est une autre histoire
    Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 336
    Points : 341
    Points
    341
    Par défaut
    Bonjour,

    effectivement le cast comme on peut le connaître en Java ou en C++ est très limité en PHP. Il se limite à (object) autrechose (object étant un mot clé, pas le nom d'un objet) et transforme en stdclass il me semble.

    Donc, effectivement, ce n'est pas possible de cette manière.

    Après, tu dois pouvoir trouver des manières plus ou moins laborieuses de reproduire ce comportement pour ce que tu veux faire.

    Je pense, entre autres, à une méthode de mySXE qui prendrait en paramètre un SimpleXMLElement et rendrait un mySXE. Pas forcément évident ni élégant...

    Sinon, une méthode peu robuste et peu élégante consisterait à sérialiser l'objet SimpleXMLElement et à traiter la string résultante pour obtenir un mySXE en désérialisant.

    Karl3i.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Points : 54
    Points
    54
    Par défaut
    Je vous remercie pour vos réponses.

    Par chance, j'ai trouvé la solution par moi même. La réponse était dans la doc de simplexml_import_dom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SimpleXMLElement simplexml_import_dom  ( DOMNode $node  [, string $class_name= "SimpleXMLElement"  ] )
    La solution est du coté du second paramètre : $class_name. Voici a quoi il sert :

    Vous pouvez utiliser ce paramètre optionnel afin que simplexml_load_string() retourne un objet de la classe spécifiée. Cette classe doit étendre la classe SimpleXMLElement.
    la solution a donc été de changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return simplexml_import_dom($noeudParent_DOM);
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return simplexml_import_dom($noeudParent_DOM, "mySXE");
    Bonne journée à tous
    Gregco

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 336
    Points : 341
    Points
    341
    Par défaut
    Bien vu, et merci pour le partage de la solution.

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

Discussions similaires

  1. Object vers List<Object>
    Par lahmar.abdel1 dans le forum Langage
    Réponses: 10
    Dernier message: 07/09/2010, 13h12
  2. utiliser Map<Object, Map<String, Object>>
    Par router_ dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 26/07/2010, 09h44
  3. Réponses: 14
    Dernier message: 14/12/2007, 15h56
  4. Transtypage Object->Derivé d'object
    Par anykeyh dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/10/2005, 14h39

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