Frage zu OOP

  • Hi,

    ich habe eine Klasse DB:

    PHP-Quellcode

    1. class DB {
    2. function connect() {
    3. include ("configs.php");
    4. $connection = mysql_connect($server,$user,$pass) or die(mysql_error());
    5. mysql_select_db($db,$connection) or die(mysql_error());
    6. }
    7. function query($query) {
    8. $ergebnis=mysql_query($query,$connection) or die(mysql_error());
    9. }
    10. function close() {
    11. //mysql_free_result($ergebnis);
    12. mysql_close($connection);
    13. }
    14. }
    Alles anzeigen


    Meine Klasse Board greift auf DB zu:

    PHP-Quellcode

    1. class Board {
    2. var $Subboard = array();
    3. var $Themen = array();
    4. var $Antworten = array();
    5. function show() {
    6. $DB = new DB();
    7. $DB->connect();
    8. //$DB->query("SELECT subboard,threads,answers FROM board");
    9. $ergebnis=mysql_query("SELECT subboard,threads,answers FROM board",$connection);
    10. while ($res=mysql_fetch_assoc($ergebnis)) {
    11. array_push($this->Subboard,$res[subboard]);
    12. array_push($this->Themen,$res[threads]);
    13. array_push($this->Antworten,$res[answers]);
    14. }
    15. foreach($this->Subboard as $var) {
    16. echo "Subboard: " . $var . "<br>";
    17. }
    18. foreach($this->Themen as $var) {
    19. echo "Themen: " . $var . "<br>";
    20. }
    21. foreach($this->Antworten as $var) {
    22. echo "Antworten: " . $var . "<br>";
    23. }
    24. $DB->close();
    25. }
    26. function add() {
    27. $DB->connect();
    28. mysql_query("INSERT INTO board (subboard,answers,hits) VALUES ('allgemein','5','20')",$connection) or die(mysql_error());
    29. $DB->close();
    30. }
    31. }
    Alles anzeigen


    Allerdings kann $DB->querey() nichts bewirken, da $connection schon verfallen ist. Wie kann ich das ganze als Klassenattriubut anglegen, so dass ich immer drauf zugreifen kann?

    Einfach so schreiben geht ja nicht wirklcih:

    var $connection= mysql_connect($server,$user,$pass) or die(mysql_error());

    Oder doch?

    Danke!

    KageMurai
    Instant URL - just add Gamers!
  • Meiner Meinung nach kannst du auf die Variable $connection gar nicht zugreifen, weil sie nur innerhalb der Methode connect besteht.

    Du hast doch ausserdem auch extra eine query_method in deiner DB-Klasse, warum benutzt du die dann nicht?! Zusätlzihc brauchst die die Verbindungsvariable, wenn du sowieso nur eine Datenbankverbindung aufrufst gar nicht speichern. Da mysql_query, automatisch eine bestehende Connection nimmt.

    Wenn du das aber alles 100% korrekt machen wollen würdest müsstest du das so machen (PHP5 vorrausgesetzt):

    Quellcode

    1. class DB {
    2. private $connection;
    3. public function connect() {
    4. include ("configs.php");
    5. $this->connection = mysql_connect($server,$user,$pass) or die(mysql_error());
    6. mysql_select_db($db,$this->connection) or die(mysql_error());
    7. }
    8. public function query($query) {
    9. return mysql_query($query,$this->connection) or die(mysql_error());
    10. }
    11. public function close() {
    12. mysql_close($this->connection);
    13. }
    14. }
    15. }
    Alles anzeigen


    Und innerhalb der Boardklasse:

    Quellcode

    1. class Board {
    2. (...)
    3. $DB = new DB();
    4. $DB->connect();
    5. $ergebnis = $DB->query("SELECT subboard,threads,answers FROM board");
    6. while ($res=mysql_fetch_assoc($ergebnis)) {
    7. array_push($this->Subboard,$res[subboard]);
    8. array_push($this->Themen,$res[threads]);
    9. array_push($this->Antworten,$res[answers]);
    10. }
    11. foreach($this->Subboard as $var) {
    12. echo "Subboard: " . $var . "<br>";
    13. }
    14. foreach($this->Themen as $var) {
    15. echo "Themen: " . $var . "<br>";
    16. }
    17. foreach($this->Antworten as $var) {
    18. echo "Antworten: " . $var . "<br>";
    19. }
    20. $DB->close();
    21. }
    22. }
    Alles anzeigen
  • Erstmal vielen dank für die Antworten!

    Hat mir sehr geholen!

    Es gibt allerdings ein weiteres kleines Problem:

    Ich rufe mit $ergebnis = $DB->query("SELECT subboard,threads,answers FROM board"); die Funktion query auf. Sie wird ausgeführt und der erste Parameter wird richtig übergeben (habe ihn mir ausgeben lasse). Er lautet wirklich: SELECT subboard,threads,answers FROM board. Dann weißt die Funktion query() einfach das Ergebnis der Abfrage an die Variable $ergebnis zurück. Wieso wird $ergebnis aber der Wert 1 zugewiesen?

    Danek!

    KageMurai
    Instant URL - just add Gamers!