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 :

[POO] Classe avec pointeurs de classes


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 41
    Points
    41
    Par défaut [POO] Classe avec pointeurs de classes
    Bonjour,

    je suis amené à créer un projet où je dois analyser beaucoup de différents fichiers de configurations sous linux.

    pour se faire, j'aimerai réaliser un "parser" plus ou moins universel qui va me retourner un ensemble de valeurs sous une forme comme un arbre binaire.

    pour le petit exemple, imaginons la syntaxe suivante (de /etc/dhcp3/dhcpd.conf)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    subnet 10.5.5.0 netmask 255.255.255.224 {
      range 10.5.5.26 10.5.5.30;
      option domain-name-servers ns1.internal.example.org;
      option domain-name "internal.example.org";
      option routers 10.5.5.1;
      option broadcast-address 10.5.5.31;
      default-lease-time 600;
      max-lease-time 7200;
    }
    je ne vais expliquer le fichier, il faut juste savoir que "subnet" est la base, "10.5.5.0" est un attribut, "netmask" aussi et "255.255.255.224" aussi. Puis le "{" signifie qu'il va passer un à block suivant pour refaire la même analyse plus tard. Petit graphique en mode texte donne ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [subnet]___________
        |   \          \
        |    \          \
    [range]  [option]   [option]
    et on imagine bien que s'il y a un nouveau block ça crée une nouvelle branche.


    Si la logique en elle même ne me pose pas de problème, c'est au niveau du PHP que ça coince!


    Comment peut-on définir une sorte de pointeur? Le passage par référence suffit-il?

    j'aimerai avoir une classe avec une structure dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Noeud {
       var $nom;
       var $attributs;
       var &$pere;
       var $fils;
       function __construct($nom, &$pere) {
          $this->pere = $pere;
          $attributs = array();
          $fils = array();
       }
       function ajouterFils((Noeud)&$fils) { $fils[] = $fils }
       [...]
    }
    vous voyez ce que je veux dire? Je me demande comment je peux utiliser une référence concrètement ou un pointeur vers un élément. Comment savoir si je récupère bien le pointeur et non la valeur? est-ce que ce que je veux faire est réalisable en php?


    merci de m'aider

  2. #2
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 41
    Points
    41
    Par défaut
    et bien je me suis répondu moi même finalement. comme quoi parfois des tests valent bien mieux qu'un long sujet de forum.

    voici ma classe, n'hésitez pas si vous avez quelque chose à redire à ça:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    class node {
    	private $name;
    	private $values;
    	private $childs;
     
    	function __construct($name) {
    		$this->name = $name;
    		$this->values = array();
    	}
     
    	function addChild(&$node) {
    		$this->childs[] = &$node;
    	}
     
    	function addValue($value) {
    		$this->values[] = $value;
    	}
     
    	function getChilds() {
    		return $this->childs;
    	}
     
    	function getValues() {
    		return $this->values;
    	}
     
    	function printNodes() {
     
    		echo("<ul>");
    		echo("<li>".$this->name."</li>");
    		foreach($this->values as $value) {
    			echo("<li>attr: $value</li>");
    		}
    		if (count($this->childs) > 0) {
    			foreach($this->childs as $child) {
    				echo("<li>child");
    				$child->printNodes();
    				echo("</li>");
    			}
    		}
    	}
     
    }
    ?>

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut,
    Comme tu demandes quand même un retour en voici un.


    En fait, à a la lecture de ton code je vois que tu utilises PHP5 (cf le mof clef __construct). Partant de ce principe je peux te dire que, un objet envoyé en paramètre à une méthode/fonction, le sera forcément par référence (l'équivalent du pointeur dans d'autres langages).
    A contrario pour envoyer une copie, tu devras au préalable le cloner.
    Et que l'utilisation du é commerciale *&* est donc inutile, dans la méthode addChild.
    Si tu veux vérifier, tu dump l'objet avant de l'envoyer dans la méthode et tu le re dumpes à l'intérieur de la méthode. Un uid est créé pour chaque objet, il sera le même dans le cas d'un passage par référence, différent dans la cas d'un passage par copie.


    Ici 660.


    bye

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 41
    Points
    41
    Par défaut
    merci pour ta réponse... je ne savais pas qu'en php5 tout objet était par référence et que c'était assez vilain en fait les référence quand on pense à ça plus à des pointeurs à la "C"...

    je me suis pris pas mal la tête, mais bon, ça va marcher :p

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

Discussions similaires

  1. Question map avec pointeur sur class.
    Par shirohige dans le forum C++
    Réponses: 7
    Dernier message: 22/11/2013, 09h45
  2. Appeler une classe avec une autre classe
    Par zooffy dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 27/01/2010, 15h15
  3. Classe avec pointeurs
    Par zouzou_18 dans le forum C++
    Réponses: 6
    Dernier message: 23/01/2010, 12h25
  4. Réponses: 2
    Dernier message: 13/05/2008, 10h02
  5. Réponses: 2
    Dernier message: 02/02/2008, 07h37

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