Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktionsweise der Klasse => Verständnisprüfung...

Einklappen

Neue Werbung 2019

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

  • Funktionsweise der Klasse => Verständnisprüfung...

    Hi mal wieder.
    Ichhabe diesmal keine Problem, sondern würde gerne einfach mal schaun lassen, ob ich richtig liege. Ich versuche mir gerade die Grundlagen für OOP etwas näher zu bringen; dazu geht eben nix ohne Klassen. Ich habe hier eine MySQL-Verbindungsklasse die auch klasse funktioniert. Um meine Verständnis der Klasse zu testen habe ich den Code kommentiert. Vielleicht könnte sich jemand mal meine Kommentierungen anschaun und mir sagen, ob ich die Funktionsweise der Klasse richtig vertanden habe ( und mich ggf. korrigiert )?
    Thx schon mal^^.

    Also, hier der Code:

    PHP-Code:
    <?php

    class db_mysql{

        private 
    $connection=NULL# private: nur innerhalb der Klasse verfügbar
        
    private $result=NULL;            # private: nur innerhalb der Klasse verfügbar

        
    public function connect($host,$database,$user,$pass){ # public: die Funktion ist außerhalb der Klasse verfügbar
            
    $this->connection=mysql_connect# Zugriff auf $connection über die Pseudo-Variable $this
                
    $host,
                
    $user,
                
    $pass,
                
    TRUE
            
    );

            
    #wenn mysql_connect TRUE zurück gibt wird die DB gewählt
            
    mysql_select_db($database,$this->connection);
        } 
    # eof public function connect

        
    public function disconnect(){
            if(
    is_resource($this->connection)){ # wenn eine Verbindung zur DB besteht ( -> is_resource => TRUE )...
                
    mysql_close($this->connection);        # schließe die DB-Verbindung die mit den Parametern von $connection aufgebaut wurde
            
    }
        }
    # public function disconnect

        
    public function query($query){
        
    /*
        benötigt $query als erwarteten Parameter. Diese werden bei Functionsaufruf ( mysql->query() ) außerhalb der Klasse
        übergeben.
        */
            
    if(is_resource($this->connection)){# wenn eine DB-Verbindung besteht prüfe, ob $result genutzt wird...
                
    if(is_resource){# ...falls ja...
                    
    mysql_free_result($this->result);# ...gebe diese Recource frei ( thx^^ )
                
    }

                
    $this->result=mysql_query($query,$this->connection);
                
    /*
                ...und für mysql_query mit dem, aus mysql->query übergebenen Parameter und der Verbindung connection aus
                */
            
    }
        }
    # public function query

        
    public function fetchRow(){
            if(
    is_resource($this->result)){# wenn mysql_query ( aus function query ) durchgeführt ist
                
    $row=mysql_fetch_assoc($this->result);# ...lege die Daten in $row als assoziatives Array ab

                
    if(is_array($row)){# prüfe, ob $row ein Array ist
                    
    return $row# wenn ja gibt $row an das Srcipt zurück.!!meine Frage an der Stelle: wohin zurück bzw. wie drückt man das aus?!!
                
    }else{
                    return 
    FALSE;# wenn $row keine Array ist gib FALSE zurück
                
    }
            }
        }
    # eof public function fetchRow
    }# eof class db_mysql

    $mysql = new db_mysql;
    $mysql->connect('localhost','classes_test','xxx','yyy');
    $mysql->query('SELECT * FROM ctest');

    while(
    $row=$mysql->fetchRow()){
    echo 
    $row['name'],$row['aname'],$row['bname'];
    }

    $mysql->disconnect();


    ?>

  • #2
    Son paar Detail-Sachen

    1. Vorsicht mit dem Begriff "Klasse". Sobald die Klasse instanziert wird, ist es in dem Sinne keine Klasse mehr, sondern ein Objekt. Die eigentliche Klasse existiert zwar noch, aber in deinem Beispiel arbeitest du dann mit einem Objekt. (wegen new).
    Warum das wichtig sein kann? Es gibt Funktionen und Variablen, die nur in Klassen, nur in Funktionen oder in Beiden verwendbar sind. Etwas schwer zu erklären ^^ Aber du kannst es gerne mal ausprobieren, ob query auch im Klassenkontext funktioniert.
    Code:
    db_mysql::query($query);
    2. Anstatt "Pseudo-Variable $this" vielleicht eher "Referenz (auf sich selbst).
    3. Zeile 19 und 31 sind identisch, insofern müsste auch "der Sinn" identisch sein
    4. Zeile 32 is mir irgendwie unklar ^^
    5. Zeile 45 is scho wieder das selbe ^^
    6. Zeile 49: return beendet eine Funktion und gibt den Wert an "den Aufruf" zurück (in deinem Fall: Zeile 62). Man sagt einfach: Die Funktion gibt xyz zurück.
    7. Naja, die Enden von Funktionen haste nich ganz einheitlich gelöst ^^ Und mit eof ... gut, kann man machen, heißt aber traditionell eigentlich "End of File". Es sollte trotzdem kein Problem geben Oder anders gesagt: ich nehm da gerne einfach "end" ^^

    Insofern: Einige Punkte, aber wenig Inhalt. Würd vorsichtig ausdrücken, dass du das im Groben und Ganzen verstanden hast, aber sowas lässt sich so etwas schwierig feststellen ^^

    Kommentar


    • #3
      1. Vorsicht mit dem Begriff "Klasse". Sobald die Klasse instanziert wird, ist es...
      Ok. Das war mir eigentlich schon bewußt. Ich muß noch etwas an meinem Wording arbeiten^^

      4. Zeile 32 is mir irgendwie unklar ^^
      hm.... jetzt wo du es sagts. Da fehlt wohl noch ein $this->result

      Und mit eof ... gut, kann man machen, heißt aber traditionell eigentlich "End of File".
      ...bei mir soll es end of function heißen -> werd mich umgewöhnen^^

      Genereller Hintergrund zu dem Code. Ich hab den Code 1:1 aus einem PDF übernommen. Dieser Code wird im Laufe der Behandlung der OOP Schritt für Schritt auf OOP "umgebaut" ( eine Klasse ist ja noch nicht wirklich OOP ). Ich wollte nur mal sichergehen, daß ich nicht schon bei den Grundlagen gedanklich fehlgeleitet bin.
      DAnke für das Feedback

      Kommentar

      Lädt...
      X