Ankündigung

Einklappen
Keine Ankündigung bisher.

Instanz einer Klasse in einer anderen Klasse verwenden

Einklappen

Neue Werbung 2019

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

  • Instanz einer Klasse in einer anderen Klasse verwenden

    naja vllt verwirrt der Titel etwas, aber das ist auch der Grund, warum mir nichts einfällt, wie man zu dem Thema eine Suchanfrage formulieren könnte.

    Ich habe also zwei Klassen
    PHP-Code:
    <?php
    class {
       public function 
    hallo() {
          echo 
    "Hallo Welt";
       }
    }

    class 
    {
       public 
    $referenz;
       function 
    __construct(&$a) { 
          
    $this->referenz &= $a//Referenz auf die Instanz abspeichern
       
    }
       function 
    hallo() {
          
    $this->referenz->hallo(); //Eine Funktion in der Klasse A aufrufen - hier tritt der Fehler auf
       
    }
    }

    $a = new A();
    $b = new B(&$a);
    $b->hallo();
    ?>
    Fatal error: Call to a member function hallo() on a non-object in D:\Server\xampp\htdocs\tests\test.php on line 14
    Ich will in der Klasse B eine Instanz der Klasse A benutzen, allerdings scheine ich da etwas nicht richtig verstanden zu haben. Zeile 14 ist natürlich
    Code:
    $this->referenz->hallo();
    Wie kann ich also eine bestehende Instanz der Klasse A in der Klasse B benutzen?

    Ich habe auf php.net im Manual (http://www.php.net/manual/de/language.oop5.php) nachgeschaut, aber nichts gefunden. Ich kann mir außerdem nicht wirklich vorstellen, wie man eine Suchanfrage zu dem Thema machen könnte (hab vieles ausprobiert, aber nie das gefunden, was ich meinte), habt also bitte Rücksicht mit mir

    [EDIT]
    So ein dreck - hab den Wald vor lauter Bäumen nicht gesehen. Ich glaube ich habe es mit den Referenzen ein wenig übertrieben, das & in der funktions-parameterliste hat gereicht. Wenn man die anderen löscht, funktioniert das ganze.
    Sry für diesen nun sinnlosen post...

  • #2
    Was willst du denn damit machen, wenn die Frage erlaubt ist?
    Ich hatte sowas ähnliches mal konstruiert um ein Datenbankobjekt in verschiedenen anderen Objekten zu verwenden bis ich dann mal auf singleton gestossen bin

    Kommentar


    • #3
      Schau mal hier rein das ist grad aktuell auch mein Thema ...

      http://www.phpfriend.de/forum/ftopic49033.html
      Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

      Kommentar


      • #4
        Re: Instanz einer Klasse in einer anderen Klasse verwenden

        Zitat von Buhmann
        [EDIT]
        So ein dreck - hab den Wald vor lauter Bäumen nicht gesehen. Ich glaube ich habe es mit den Referenzen ein wenig übertrieben, das & in der funktions-parameterliste hat gereicht. Wenn man die anderen löscht, funktioniert das ganze.
        Sry für diesen nun sinnlosen post...
        du brauchst garkein ampersand (&) ! das macht php5 automatisch!

        eagleScripts.de

        Kommentar


        • #5
          PHP-Code:
          <?php

          class Demo {

              
          privtate $reference null;

              public function 
          __construct($reference) {
                  
          $this->reference $reference;
              }

              public function 
          testMethod() {
                   
          $this->reference->foo();
              }

          }


          class 
          Bar {

               public function 
          foo() {
                     echo 
          __METHOD__;
               }

          }


          $obj = new Demo(new Bar());
          $obj->testMethod();

          ?>
          Teste es.
          [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

          Kommentar


          • #6
            und ich würde gleich vorschlagen, wie im verlinkten beispiel, den klassentyp bei der konstruktordeklaration mit anzugeben, dann meckert php bereits beim aufruf der __construct() - methode, wenn man müll übergibt.
            damit wäre der fehler an der richtigen stelle aufgefallen

            Kommentar


            • #7
              requires v5.1
              [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

              Kommentar


              • #8
                Zitat von Ben
                requires v5.1
                bool(false).

                bool(true) für arrays. für objekte war's aber seit php5.0 schon da.
                http://us2.php.net/manual/en/languag...ypehinting.php

                Kommentar

                Lädt...
                X