Klasse in Klasse benutzen

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

  • Klasse in Klasse benutzen

    Hallo,
    ich habe 2 Klassen, einmal eine Mysql Klasse und eine User Managment Klasse.

    Jetzt möchte ich in der User Managment Klasse, eine funktion der MySQL Klasse aufrufen. Allerdings muss es die bereits initialisierte MySQL Klasse sein. Wie stell ich das am dümmsten an??


    als kleines beispiel
    PHP-Code:
    class mysql(){
       function 
    countQuerys(){
           
    //....
       
    };
    }

    class 
    users(){
       
    funtion sqlQuery(){
       
    //Hier soll der countQuerys ausgeführt werden. der als $mysql = new mysql(); initialisiert wurde
       //Also normalerweise ausserhalb der class $mysql->countQuerys(); aber wie innerhalb einer anderen class?

       
    };

    Danke schonmal

    MfG
    Nascar

  • #2
    wie bereits im IRC gesagt über global:

    PHP-Code:
    class users(){
       
    funtion sqlQuery(){
         
    $GLOBALS['mysql']->countQuerys(); 

       } 
    oder
    PHP-Code:
    class users(){
       
    funtion sqlQuery(){
         global 
    $mysql;
         
    $mysql->countQuerys(); 

       } 

    Kommentar


    • #3
      okay sry aber im IRC hab ich das eben nicht kapiert und ich wollte dich auch nicht damit nerven mir ein beispiel zu schreiben aber trotzdem danke nochmal.

      gute nächtle euch allen

      MfG
      Nascar

      P.S. des funzt wunderbar

      Kommentar


      • #4
        Moin,

        Globale Variablen deuten einfach auf schlechte Programmierung hin.
        Du kannst das Objekt per Parameter übergeben und dann darauf zugreifen, oder ein Exemplar der Klasse innerhalb der anderen Klasse erzeugen.

        Gruß Thomas

        Kommentar


        • #5
          Hier ein einfaches Beispiel:

          PHP-Code:
          class mysql
          {
              
          // ... Deklarationen ... function query() ...
          }

          class 
          user
          {
              var 
          $sql;

              
          // ... Deklarationen ...
              // Referenzierung der $mysql-Verbindungsvariable:

              
          function user(&$mysql$andere_parameter)
              {
                  
          $this->sql = &$mysql;
              }

              
          // Anwendungsbeispiel
              
          function test($user)
              {
                  
          $res $this->sql->query("SELECT * FROM ...");
                  
          $ret mysql_fetch_array($res);
                  
          // usw...
              
          }
          }

          $mysql = &new mysql('localhost''root''''test');
          $user = &new user($mysql'bla'); 
          Gruß,
          Flo.

          Kommentar


          • #6
            Original geschrieben von Trashar
            wie bereits im IRC gesagt über global:

            PHP-Code:
            class users(){
               
            funtion sqlQuery(){
                 
            $GLOBALS['mysql']->countQuerys(); 

               } 
            oder
            PHP-Code:
            class users(){
               
            funtion sqlQuery(){
                 global 
            $mysql;
                 
            $mysql->countQuerys(); 

               } 
            das ist Unfug, denn du machst die Klasse von der anderen Klasse abhängig. Besser s. Posting von Fl0

            Kommentar


            • #7
              ich würde ein Objekt 'user' nicht mit einer Methode sqlQuery() versehen. Das paßt semantisch nicht.
              PHP-Code:
              class Mysql {
                  
              $var query_count;
                  function 
              Mysql($user$pass$host 'localhost'$port 3306) {
                      
              $this->query_count 0;
                      
              $this->connect($host$port$user$pass);
                  }
                  function 
              connect($host$port$user$pass) {
                      
              // mysql_connect() usw.
                  
              }
                  function 
              query($sql) {
                      
              $this->query_count++;
                      
              // mysql_query() usw.
                  
              }
                  function 
              get_count() {
                      return 
              $this->query_count;
                  }
              }

              class 
              User {
                  var 
              $dbh;
                  function 
              User($dbh) {
                      
              $this->dbh $dbh;
                  }
                  function 
              login() {
                      
              $sql "SELECT ...";
                      
              $this->dbh->query($sql);
                      return (
              $this->dbh->count_rows() == 1);
                  }
              }

              $mysql = new Mysql('xxx''yyy');
              $user = new User($mysql);

              if (!
              $user->login()) die(':-P');
              echo 
              ':-)'
              (Verdammt, jetzt ist mein Kaffee fast kalt. )
              EDIT:
              wie ich sehe haben andere ihr Frühstück auch vernachlässigt, mit dem selben Ergebnis

              Kommentar


              • #8
                Original geschrieben von onemorenerd

                (Verdammt, jetzt ist mein Kaffee fast kalt. )
                EDIT:
                wie ich sehe haben andere ihr Frühstück auch vernachlässigt, mit dem selben Ergebnis
                Ist doch ein Grund einen neuen zu holen
                Hab dabei gefrühstückt

                Aber ich denke dass unsere Beispiele gut verdeutlichen was wir meinten

                Gruß,
                Flo.

                Kommentar


                • #9
                  OffTopic:
                  aahhh... hätt mir fast die Zunge mit dem heißen Kaffee verbrannt
                  Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                  Schön - etwas Geschichte kann ja nicht schaden.
                  Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                  Kommentar


                  • #10
                    Original geschrieben von Fl0
                    Ist doch ein Grund einen neuen zu holen
                    Hast ja keine Ahnung, sitz hier vor einem tropfenden Wasserhahn, an den bis vor kurzem noch ein Kaffeeautomat angeschlossen war. Jetzt gibt es hier keinen Kaffee mehr, ich müßte in ein anderes Gebäude rennen ...

                    @Quetschi:

                    Weils irgendwie grad paßt (zumindest die Domain), ein Crashkurs über TCP/IP:
                    http://overcaffeinated.net/comic/date/20031103

                    Kommentar


                    • #11
                      Mein Weg zur Kaffeemaschine is kurz aber ich trink kein Kaffee

                      lol der comic is gut SYN/ACK lol

                      Der is au gut

                      Liebe Grüße,
                      Flo.

                      Kommentar

                      Lädt...
                      X