begin process at 2012 02 13 07:18:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

[PHP5] Etendre une classe prédéfinie


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[PHP5] Etendre une classe prédéfinie

mercredi 13 décembre 2006 à 14:45:34 | [PHP5] Etendre une classe prédéfinie

ZuGbEn

Bonjour !

Je débute plus ou moins dans la programmation orientée objet, et je souhaite faire une classe qui, à partir d'un DomNode existant, ajoute des methodes à cet objets.

Bon déjà je sait pas si c'est possible, ensuite (si ca l'est) je ne sait pas comment construire ma nouvelle classe.

En fait, je ne sait pas vraiment par quoi remplacer les [???] dans le code suivant (qui devrait afficher "  root  ") :


<?php
class class1 extends DomNode{
  publicfunction__construct([???]){
  
[???]
  }
  publicfunction dispName(){
    echo$this->nodeName;
  }
}

// créé un document XML de test
$doc = new DOMDocument();
$doc->loadXML('<root><node/></root>');

// créé un DomNode

$node = $doc->childNodes->item(0);

// créé un objet class1 à  partir du DomNode
$a = new class1($node);

// Test d'une méthode de class1
$a->dispName;
?>


Quelqu'un pourrait-il m'aider ? ou me rediriger vers un tuto assez complet sur les classes en php5, où la réponse aie une chance de figurer ?

Merci beaucoup !

mercredi 13 décembre 2006 à 15:12:52 | Re : [PHP5] Etendre une classe prédéfinie

younes371

voilà un lien :
http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/coursphp/domxml_fonctionnement.html
mercredi 13 décembre 2006 à 15:36:05 | Re : [PHP5] Etendre une classe prédéfinie

malalam

Administrateur CodeS-SourceS
Hello,

pas besoin de constructeur. Dans ce cas, le constructeur de la classe paren,te sera utilisée lorsque ta classe personnalisée sera instanciée.
Sinon, si tu veux faire des ajouts dans le constructeur :

class child extends parent { 
    public function __construct ($var) {
       // traitement spécifique de child
       parent::__construct ($var);
    }
}

mercredi 13 décembre 2006 à 16:08:51 | Re : [PHP5] Etendre une classe prédéfinie

ZuGbEn

Merci youn371, mais le liens que tu m'as donné ne parle pas du tout d'ajouter des méthodes à une classe.

Malalam, je parle d'étendre une classe prédéfinie de php5.

Malheureusement, il n'y a pas de constructeur à cette classe (DomNode), donc en remplacant les premier [???] par $i et le deuxième [???] par parent::__construct($i); , il me sort une erreur
Fatal error: Can not call constructor ...

Si on ne met rien dans les [???], il n'affiche rien (et retourne NULL), ce qui est normal vu que je ne vois pas comment il peut savoir de quel Node il s'agit.



Hum si quelqu'un a encore une idée... jsuis preneur !

mercredi 13 décembre 2006 à 16:37:48 | Re : [PHP5] Etendre une classe prédéfinie

malalam

Administrateur CodeS-SourceS
J'avais compris, je connais bien DOMDocument.
Un document XML est un node. Un gros node.
C'est poiur ça que DOMDocument étend DOMNode...
En clair, DOMNode est la classe de haut niveau, dans cette API.
Donc, si tu veux faire ce que tu veux faire, tu dois déjà redéfinir DOMDocument...DOMElement, DOMNodeList etc...pour que leurs méthodes, attributs retournent ta classe au lieu d'un DOMNode.

Parce que ça : $node = $doc->childNodes->item(0);
ça renvoir un DOMNode. Un objet déjà instancié, je veux dire.

Une solution simple est :

class class1 {
   
    private $node;

  public function__construct(DOMNode $node){
   
$this -> node = $node;
  }
  public function dispName(){
    if (is_null ($this -> node)) {
       throw new Exception ('Pas de DOMNode défini');
    }
    echo $this ->node -> nodeName;
  }
}

mercredi 13 décembre 2006 à 17:05:30 | Re : [PHP5] Etendre une classe prédéfinie

ZuGbEn

Ok... j'avais pensé à la "solution simple" mais ca me plaisait pas d'avoir deux variables différentes pour traiter un node... (une instance de DomNode et une autre de ma classe)

Mais bon si il n'y a pas d'autre moyen... je prend quand même !

Hum... c'est triste ... j'hésite à tout foutre dans des fonctions maintenant (qui prendraient en argument le node)...

jeudi 14 décembre 2006 à 18:52:02 | Re : [PHP5] Etendre une classe prédéfinie

DiGhan

Hello, je n'ai jamais utilisé les classes DOMNode et DomDocument. Cependant, j'ai pu lire que la classe DOMNode est constituée de plusieurs attributs dont un du type DOMNode (node). De plus DOMNode semble être la classe 'racine' (la + haute au niveau de l'héritage), donc de fortes chances que ces attributs soient déclarés comme étant 'protected'. N'est-il pas plus simple d'utiliser directement cet attribut dans une classe fille ? class subClass extends DOMNode { public function __construct(DOMNode $pNode) { $this->node = $pNode; } }
jeudi 14 décembre 2006 à 19:17:35 | Re : [PHP5] Etendre une classe prédéfinie

malalam

Administrateur CodeS-SourceS
C'est qu'est je disais ;-)
Mais dans ce cas, inutile d'étendre DOMNode.


Cette discussion est classée dans : classe, créé, class1, php5, domnode


Répondre à ce message

Sujets en rapport avec ce message

Fonctionnement SDO [ par guill76 ] Bonjour,Je viens de découvrir un petit peu l'extension SDO de PHP5 que j'ai récupérée en installant PHP5.2.5 il ya environ un semaine et dans cette ex [POO] Une classe dans une classe [ par Mrreivax ] Bonsoir.Et bien voila. J'ai créé une classe de gestion des images.J'ai par la suité créé une autre classe de gestion de banières.Mais, cette dernière Surcharge d'une fonction abstraite [ par codefalse ] Bonjour à tous :)J'ai un petit soucis syntaxique, j'aimerai votre avis avant de continuer.J'ai une classeabstract class genericReader {} qui contient PHP5 -> SPL , tri sur DirectoryIterator [ par stailer ] Bonjour, J'utilise la classe DirectoryIterator pour lister tous les répertoires et fichiers d'un chemin. Grâce à isFile je peux lister uniquement les constante de classe à récupérer dans la classe parente [ par rekam ] Bonjour!oui, je sais, le titre fait 3km de long, mais j'ai de la peine à le raccourcir...Ainsi donc, voici mon problème: 1) J'ai 2 classe A et B2) La Throw new HOW ? [ par codefalse ] Hello tout le monde ! :)Alors voila, pour mes besoins perso je me suis fait une classe AlternativException extends Exception et une classe InvalidArgu php5+mail [ par graph2007 ] svp tous le mondes je suis en etat grave, j'ai un script mail qui fonctionne bien sur php4 mais c'marche plus sur php5. aider moi svp je doit le fai prendre en compte .php5 [ par caviar ] Saluté, je voulais savoir ou configurer dans apache l'interpretation de fichiers .php5 par PHP ... car j'ai une appli avec les fichiers en .php5 et il Avis sur la façon de procéder ? [ par g_barthe ] Bonjour,Je me suis mis il y a déjà quelques mois à développer un outils de gestion de collections (BD, CD, étiquettes de vins...) pour les collectionn Recupere l'objet parent d'une classe fille [ par knabis2000 ] Bonjour a tous,J'aurait une question :Est il possible de recuperer l'instance de l'objet mere d'une classe fille ?Petite explication : Imaginons 2 cla


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,014 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales