Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmation Orientée Objet

Lien entre class PHP

Sujet résolu
    4 février 2006 à 15:28:26

    Bonjour,

    Commencons par le code PHP (test) qui ne fonctionne pas :

    <?php
    class A
    {
     public $var = 'test';

     public function toto()
      {
       return $this->var;
      }
    }

    class B
    {
     public function titi()
      {
       echo A::toto();
      }
    }

    $a = new A();
    $b = new B();
    $b->titi();
    ?>


    Voici ce que je cherche à afficher à l'écran :

    Citation

    test



    Le but de la class B est de récupéré la valeur dans la class A (pour l'afficher dans cette exemple, mais mon but est de travailler dessus).

    Malheureusement, ce code ne fonctionne pas, pouvez vous m'aidez ? Il faut savoir que aucune erreur de syntaxte ou assimilé n'est retournée. Ce code est compatible seulement PHP 5.0.x.

    Amicalement,
    Jordan
    • Partager sur Facebook
    • Partager sur Twitter
      4 février 2006 à 15:34:45

      tu dois pas faire class B extends A pour récuperer la fonction toto ?
      • Partager sur Facebook
      • Partager sur Twitter
        4 février 2006 à 15:39:48

        Re,

        Merci de ta réponse mais je sais que la syntaxe avec un extends est la suivante :

        <?php
        class A
        {
         public $var = 'test';

         public function toto()
          {
           return $this->var;
          }
        }

        class B extends A
        {
         public function titi()
          {
           echo parent::toto();
          }
        }

        $b = new B();
        $b->titi();
        ?>


        Ce script fonctionne correctement. Malheureusement, ma class B pour des raisons au niveau du constructeur ne doit pas être une class extends de A. En effet, mon constructeur de ma class A comporte des requêtes SQL. Ma class B va être instancier pleins de fois : et donc executer autant de fois le constructeur de A. (= Laggage de serveur).

        Quelqu'un d'autres à une idée ?

        Amicalement,
        Jordan
        • Partager sur Facebook
        • Partager sur Twitter
          4 février 2006 à 15:41:23

          Non lol !
          Mais je ne pense pas que ce soit possible !
          • Partager sur Facebook
          • Partager sur Twitter
            4 février 2006 à 15:45:52

            Re,

            La syntaxe A::toto(); est correcte comme le prouve ce script :

            <?php
            class A
            {
              function toto()
              {
                    echo 'test';
              }
            }

            class B
            {
              function titi()
              {
               A::toto();
              }
            }

            $a = new A();
            $b = new B();
            $b->titi();
            ?>


            Il affiche bien :

            Citation

            test



            Le problème se situe au niveau du : $this->var. Logique puisque que le $this est associé à l'objet courant et que c'est celui de la class B. Mais comment je fais pour qu'il me retourne quelque chose de A ?

            Amicalement,
            Jordan
            • Partager sur Facebook
            • Partager sur Twitter
              4 février 2006 à 15:57:18

              tu ne peux pas.

              Imagine qu'il y ait 8 instances de la class A, laquelle la classe B doit-elle utiliser?

              Sans passer la référence vers l'instance en paramètre, tu n'y arrivera jamais ^^

              C'est pourquoi A::toto() fonctionne mais pas A->toto()
              le :: fait référence à la class (comme si elle était statique) alors que le -> s'utilise pour une instance :)
              • Partager sur Facebook
              • Partager sur Twitter
                4 février 2006 à 16:07:25

                Ok merci, mon problème est en partie réglé, mais je vais essayer de faire autrement. ^^

                EDIT : J'ai été induit en erreur, en fait, le constructeur de A est appelé qu'une fois même si j'instancie x fois la class B. :p N'empeche que ca règle pas le problème, la class B n'a pas accès à public var de la class A. :-°
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  4 février 2006 à 18:14:02

                  Je vois pas le problème.
                  Soit :
                  CA une instance de la classe A.
                  CB une instance de la classe B.

                  Suffit de faire dans CB : echo($CA->var);
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 février 2006 à 18:52:14

                    non, car la portée de $CA ets limitée. Il faut donc passer $CA en paramètre pour pouvoir faire ca.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Programmation Orientée Objet

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown