Klasse in Klasse benutzen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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(); 

       } 

    Comment


    • #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

      Comment


      • #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

        Comment


        • #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.

          Comment


          • #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

            Comment


            • #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

              Comment


              • #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.

                Comment


                • #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!

                  Comment


                  • #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

                    Comment


                    • #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.

                      Comment

                      Working...
                      X