Frage zu OOP

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

  • Frage zu OOP

    Hallo,

    ich probiere jetzt scho 3 Stunden daran rum und komme nicht weiter. Habe schon alles probiert und auch gegoogelt.

    Es ist so, ich habe eine Klasse, die eine Verbindung zu einer Datenbank herstellt.
    Diese Klasse kann auch befehle auf die DB ausführen.
    Das klappt soweit auch alles!

    Jetzt gibt es eine zweite Klasse, die die Funktionen der ersten benötigt.
    Und genau da ist mein Problem, denn ich krieg es einfach nicht hin, einen Befehl der ersten Klasse in der zweiten aufzurufen.

    Ich will es also ca. so haben:
    PHP-Code:
    class klasse1 
    {
           function    
    funktion1()
               { 
    //blaaaa
               
    }
               
           function     
    funktion2()
               { 
    //blaaaa
               
    }
    }

    $h = new klasse1;

    class 
    klasse2
    {
                function 
    mach_das()
               {
               
    $h->funktion1();
               }

    Ich bin über jede Hilfe dankbar!

    Gruß


    Zuletzt geändert von Seggl-hoch-drei; 20.10.2007, 20:03.
    Tempim.de - Dein kostenloser Bildhoster
    Tipps und Tricks für Webmaster

  • #2
    Du machst Witze...

    Such mal nach Datenbankklasse in anderer Klasse verwenden oder so.

    Tipp: Schau dir das Singleton Designpattern an.

    Kommentar


    • #3
      das mit dem singleton hab ich auch schon wo gelesen
      angeblich ist das aber alles andere als eine gute idee

      was sich gut angehört hat, war dass man die erste klasse an die 2. über den konstruktor übergeben soll.

      stellt sich nur die frage, wie ich das anstellen soll...

      so gibt es einen fehler:

      PHP-Code:
      class klasse1 { ..... }
      $sers = new klasse1

      class klasse2 { function klasse2($a) { $a->funktion_aus_1(); } } 
      Tempim.de - Dein kostenloser Bildhoster
      Tipps und Tricks für Webmaster

      Kommentar


      • #4
        so gibt es einen fehler:
        Das ist ja mal wieder sehr genau!

        PHP-Code:
        class foo {
          function 
        bla() { ... }
        }

        class 
        bar {
          function 
        __construct($fooObject) {
            
        $this->foo $fooObject;
          }
          function 
        run()  {
            
        $this->foo->bla();
          }
        }

        $foo = new foo;
        $bar = new bar($foo);
        $bar->run(); 
        OffTopic:
        Faulheit hat gesiegt!

        Kommentar


        • #5
          das mit dem singleton hab ich auch schon wo gelesen, angeblich ist das aber alles andere als eine gute idee
          Ich hab auch schon gelesen das man nicht allem trauen soll was man liest.
          stellt sich nur die frage, wie ich das anstellen soll...
          In dem du beim Erstellen eine Referenz als Parameter für den Konstruktor übergibts?
          PHP-Code:
          new Klasse $datebankInstanz ) ; 
          Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

          Kommentar


          • #6
            PHP-Code:

            class A
            {
                public function 
            __construct()
                {

                }
            }

            $object_a = new A();

            class 
            B
            {
                private 
            $_a NULL;

                public function 
            __construct(A $a)
                {
                    
            $this->_a $a;
                }
            }

            $object_b = new B($object_a); 
            Nieder mit der Camel Case-Konvention

            Kommentar


            • #7
              die fehlermeldung ist, dass ich angelblich das argument 1 nicht an den konstruktor übergeben habe...
              Tempim.de - Dein kostenloser Bildhoster
              Tipps und Tricks für Webmaster

              Kommentar


              • #8
                Ich hab auch schon gelesen das man nicht allem trauen soll was man liest.
                Naja, es ist mit Sicherheit ein Teil Ansichtssache dabei. Aber bequem ist das singleton mit sicherheit.

                Kommentar


                • #9
                  danke für die antworten
                  ich werd mal alles durchprobieren
                  Tempim.de - Dein kostenloser Bildhoster
                  Tipps und Tricks für Webmaster

                  Kommentar


                  • #10
                    das geht nicht mit dem übergeben!

                    Fatal error: Call to a member function on a non-object in /var/www/web283/html/virtual-meetings/... on line 526

                    so bedankt er sich bei mir!

                    in der zeile steht:

                    $this->handler->test();
                    Tempim.de - Dein kostenloser Bildhoster
                    Tipps und Tricks für Webmaster

                    Kommentar


                    • #11
                      Original geschrieben von Seggl-hoch-drei
                      das geht nicht mit dem übergeben!

                      Fatal error: Call to a member function on a non-object in /var/www/web283/html/virtual-meetings/... on line 526

                      so bedankt er sich bei mir!

                      in der zeile steht:

                      $this->handler->test();
                      Hmmm, meine Glaskugel ist kapput - kannst du bitte entsprechenden Code posten?
                      Nieder mit der Camel Case-Konvention

                      Kommentar


                      • #12
                        PHP-Code:
                        class datenbank
                        {
                            var 
                        $cid "";
                            var 
                        $ergebnis "";
                            var 
                        $anfragen_ges 0;
                            
                            function 
                        datenbank($db_host$db_user$db_pw)
                            {
                                if(!
                        $this->cid mysql_pconnect($db_host$db_user$db_pw))
                                {
                                
                        $this->cid mysql_connect($db_host$db_user$db_pw);
                                }
                            }
                            
                            
                            public function 
                        test(){echo "test"; }

                        }
                        $connection = new datenbank(meinedatenbankdaten);

                        class 
                        Message_VM 

                            
                            var 
                        $handler;

                            function 
                        __construct($fooObject
                            {
                            
                        $this->handler $fooObject
                            
                            }    
                            
                            
                                function 
                        mach_das()
                        {
                            
                        $this->handler->test();
                        }
                        }

                        $kp = new Message_VM($connection);
                        $kp->mach_das(); 
                        das wär mein kopmpletter code


                        EDIT: Nicht wundern, dass er jetzt kürzer ist. Ich habe die funktionen entfernt, die nichts direkt mit dem problem zu tun haben
                        Zuletzt geändert von Seggl-hoch-drei; 20.10.2007, 20:38.
                        Tempim.de - Dein kostenloser Bildhoster
                        Tipps und Tricks für Webmaster

                        Kommentar


                        • #13
                          hmm

                          kann es sein, dass er den konstruktor mit __construct nicht erkennt?
                          das, was da drin steht, wird nämlich nicht ausgeführt, wenn ich die klasse erzeuge.

                          wenn ich den konstruktor so nenne wie die funktion selbst, dann geht es allerdings...

                          das Problem mit dem Aufrufen der anderen Klasse besteht aber immernoch..
                          Tempim.de - Dein kostenloser Bildhoster
                          Tipps und Tricks für Webmaster

                          Kommentar


                          • #14
                            Das kommt ganz darauf an, welche PHP-Version du benutzt. In Versionen < 5 trägt der Konstruktor den Namen der Klasse:

                            PHP-Code:

                            class Test
                            {
                                
                            // Konstruktor-Methode
                                
                            function Test()
                                {

                                }

                            Nieder mit der Camel Case-Konvention

                            Kommentar


                            • #15
                              dann ists klar

                              ok, das mit dem konstruktor passt jezt

                              aber ich komm immer noch nicht auf die funktionen der klasse datenbank!

                              ich finde auch keinen fehler in meinem skript....
                              wär echt freundlich, wenn sich das einer anschauen würde
                              Tempim.de - Dein kostenloser Bildhoster
                              Tipps und Tricks für Webmaster

                              Kommentar

                              Lädt...
                              X