MO: Variable an Klasse übergeben

Hallo zusammen.

Ich habe eine Klasse für die wichtigsten Funktionen in Verbindung mit MySQL.
Wie ich die Funktionen aus dem PHP-Script heraus anspreche weiß ich.
Wie jedoch übergebe ich den Inhalt einer einzelnen Variable an die Klasse, damit sie in den jeweiligen Funktionen zur Verfügung steht?

Beispiel Klasse:

class class_test{
  var $host = "localhost";
  var $user = "username";
  var $pass = "password";
  var $dbase = "";

function db_connect(){
    $db = mysql_connect($this->host, $this->user, $this->pass) or die ("Keine Verbindung zur Datenbank");
          mysql_select_db($this->dbase, $db) or die ("verbindung zur datenbank fehlgeschlagen");
    return $db;
  }

Ich möchte nun die Variable $dbase im eigentlichen Skript an die Klasse übergeben, da ich mit mehreren Datenbanken arbeiten muß.

Wäre für jeden Tip dankbar.

Gruß

MO

  1. hallo,

    Wie jedoch übergebe ich den Inhalt einer einzelnen Variable an die Klasse, damit sie in den jeweiligen Funktionen zur Verfügung steht?

    $klasse->variable = "wert";

    class class_test{
      var $host = "localhost";
      var $user = "username";
      var $pass = "password";
      var $dbase = "";

    function db_connect(){
        $db = mysql_connect($this->host, $this->user, $this->pass) or die ("Keine Verbindung zur Datenbank");
              mysql_select_db($this->dbase, $db) or die ("verbindung zur datenbank fehlgeschlagen");
        return $db;
      }

    Würde ich so nicht machen, wenn der Datenbankname dynamisch ist.

    Dann eher:

    function db_connect($dbase){
        $db = mysql_connect($this->host, $this->user, $this->pass) or die ("Keine Verbindung zur Datenbank");
              mysql_select_db($dbase, $db) or die ("verbindung zur Datenbank fehlgeschlagen");
        return $db;
      }

    Viele Grüße,
    Christian

  2. Wäre nicht eine Klasse "Database" oder "Connection" sinnvoller, welche dann die Datenbankverbindung kapselt? Die Verbindungsargumente könntest Du im Konstruktor übergeben. Gleichzeitig würde das zu einer Abstraktion von der Datenbank API werden, weil Du dann  keine mysql_* Funktionen mehr direkt aufrufst, sondern dies über Exemplare der Klasse machst.

    class Connection
    {
      function Connection($host, $user, $password, $db)
      {
        $this->m_connection = @mysql_connect($host, $user, $password);
        // Erfolg abfragen und ggf. mittels mysql_select_db($db)
        // Datenbank festlegen
      }

    // hier weitere Methoden einer Datenbankverbindung
    }

    Eine Klasse einfach nur als Container für einen Haufen Funktionen zu benutzen ist nicht unbedingt im Sinne von OOP.

    MfG
    GK

  3. Hallo,

    also Du änderst den Inhalt von Variablen innerhalb einer Klasse natürlich mit den get und set Methoden.

    Sprich:

    class class_test{
      var $host = "localhost";
      var $user = "username";
      var $pass = "password";
      var $dbase = "";

    function db_connect(){
        $db = mysql_connect($this->host, $this->user, $this->pass) or die ("Keine Verbindung zur Datenbank");
              mysql_select_db($this->dbase, $db) or die ("verbindung zur datenbank fehlgeschlagen");
        return $db;

    function set_dbase($set) {
    $dbase = $set;
    }

    }

    Der Aufruf erfolgt dann quasi so:

    $grummel ist eine Instanz Deiner Klasse class_test, also

    $grummel.set_dbase(wasauchimmerfuereinstring);

    Grüße und viel Spaß, Matthias