Klassen, die sich gegenseitig brauchen?!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Klassen, die sich gegenseitig brauchen?!

    Hey,
    hab' mal ne Frage: Ist es möglich 2 oder mehr Klassen iwie so zu definieren, das sie sich gegnseitig benutzen können?

    PHP-Code:
    class demo1 {
    function 
    doThis () {
    $demo = new demo2;
    $demo->doThat();
    }
    }

    class 
    demo2 {
    function 
    doThat () {
    $demo = new demo1;
    $demo->doThis();
    }

    Ist das irgendwie möglich?

    lg

  • #2

    Kannst du die Fragestellung mal etwas konkretisieren und am besten auch an einem Beispiel erläutern? Es mag ja an der Uhrzeit liegen, aber mit deiner Frage kann ich absolut nichts anfangen Mal davon abgesehen, dass du doch ein funktionierendes Beispiel geliefert hast.

    Grüße
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      PHP-Code:
      class Eins{
         private 
      $_objZwo;
         
         public function 
      Eins(){
             
      $_objZwo = new Zwo($this);
         }

         public function 
      doAnything(){
             return 
      $_objZwo->toString();
         }
      }

      class 
      Zwo{
         
         private 
      $_objEins;
         
         public function 
      Zwo($obj_eins){
            
      $this->_objEins $obj_eins;
         }

         public function 
      doAnythingToo(){
            return 
      $_objEins->doAnything();
         }


      aber generell würd ich mal oop grundlagen lernen

      Kommentar


      • #4
        Ähm ... das ist doch zirkelbezug und nicht erlaubt.

        Kommentar


        • #5
          Das Beispiel von micronax macht vielleicht noch Sinn, BugBites Beispiel ist aber, wie asp2php schon sagt, Käse. Aber was genau willst du jetzt eigentlich wissen @TO?

          Kommentar


          • #6
            Ich schreibe meine neuen Webapplications jetzt objektorientiert. Ich habe dann zum Beispiel eine Klasse, mit der man auf die Nutzerdaten zugreifen kann, eine für das WhoIsOnlineSystem und eine zum auswerten von was weiß ich.. Bewegungsprofilen in der Website..

            Die Klassen stehen in verschiedenen Dateien. Jede in ihrer eigenen. Die Klassen werden alle von einer bestimmten Datei geladen (Das ganz ist eine Art "Framework") Diese Datei wird dann von den einzelnen Projekten included.

            so werden die Dateien mit den klassen etwa geladen:

            PHP-Code:
            require("accounting.php");
            $accounting = new accounting();

            require(
            "whoisonline.php");
            $whoisonline= new whoisonline();

            require(
            "misc.php");
            $misc= new misc();

            require(
            "analysis.php");
            $analysis= new analysis(); 
            Das Problem ist jetzt, das die Klasse whoisonline auch Account und Analysedaten erfassen soll, also die jeweiligen Klassen braucht. Aber andere Klassen wie z.B. Accounting brauchen auch Daten bzw Funktionen aus der whoisonline.

            Das Problem ist ja, die Klasse Accounting wird ja vor der Klasse whoisonline geladen und initialisiert, daher sind die funktionen der whoisonline zu dem zeitpunkt noch nicht verfügbar.

            Ich will jetzt auch nicht alles immer so schreiben müssen, das alles in der perfekten Reihenfolge ist.. das geht nämlich nicht.

            Gibt es also irgendeine Möglichkeit, das Klassen praktisch alle gleichzeitig geladen werden oder sie sich (vllt durch caching) auch auf erst später initialisierte klassen beziehen können?

            lg

            fabi

            Kommentar


            • #7
              Wieso nicht so:

              PHP-Code:
              require("accounting.php");
              require(
              "whoisonline.php");

              $accounting = new accounting();

              $whoisonline= new whoisonline();
              $whoisonline->accounting $accounting;
              $accounting->whoisonline $whoisonline
              Oder direkt über ein Registry-Pattern:
              PHP-Code:
              class whoisonline {
                  public function 
              tuIrgendwasMitAccounting() {
                      
              $accounting Application::getRegisteredObject'accounting' );
                  }
              }

              // Initialisierung:
              $accounting = new accounting();
              Application::registerObject$accounting'accounting' ); 

              Kommentar


              • #8
                PHP-Code:
                <?php
                    error_reporting
                (E_ALL);
                    
                    class 
                Eins{
                   private 
                $_objZwo;
                   
                   public function 
                Eins(){
                       
                $this->_objZwo = new Zwo($this);
                   }

                   public function 
                doAnything(){
                       return 
                $this->_objZwo;
                   }
                   
                   public function 
                __toString(){
                       
                   return 
                "geht auch";
                   }
                }

                class 
                Zwo{
                   
                   private 
                $_objEins;
                   
                   public function 
                Zwo($obj_eins){
                      
                $this->_objEins $obj_eins;
                   }

                   public function 
                doAnythingToo(){
                      return (string)
                $_objEins->doAnything();
                   }
                   
                   public function 
                __toString(){
                       
                   return 
                "geht doch".$this->_objEins;
                   }

                }

                $eins = new Eins();
                      
                echo 
                $eins->doAnything();

                ?>
                getestet und funktioniert einwandfrei

                andere technologien können und machen das auch O.o

                edit:
                und warum sollte er eine "whoisonline" klasse erstellen??
                $accounting->getUsers(); bzw $accounting->getOnlineUsers();

                Zuletzt geändert von BugBite; 27.06.2008, 12:41.

                Kommentar


                • #9
                  Hatte gar nicht gesehen, dass du dem Zwo-Konstruktor eine Eins-Instanz übergibst. So geht's natürlich auch

                  Habe so das leichte Gefühl, der TO ist noch nicht so geübt in der OOP und hat einfach ein etwas unstrukturiertes Klassenkonzept.

                  Kommentar


                  • #10
                    OffTopic:
                    hat sich halt bisher mehr auf hochsicherheits-konzepte spezialisiert.

                    Kommentar


                    • #11
                      PHP-Code:
                      require("accounting.php");
                      $accounting = new accounting();

                      require(
                      "whoisonline.php");
                      $whoisonline= new whoisonline();

                      require(
                      "misc.php");
                      $misc= new misc();

                      require(
                      "analysis.php");
                      $analysis= new analysis(); 

                      vieleicht solltst du dich mal mit autoload beschäftigen
                      <?php echo "ad astra"; ?>
                      www.utopiafuture.de

                      Kommentar

                      Lädt...
                      X