Klasse in einer anderen Klasse verwerden?

MadCrusher

Erfahrenes Mitglied
Hallo,

Ich hoffe ihr könnt mit weiter helfen...
Ich habe eine MYSQL- und eine Login-Klasse geschrieben.
Nun hab ich in einer datei beide init. und möchte gerne in der Login-Klasse die MYSQL-Funktionen die ich geschrieben hab nutzen...

Wie kann ich in der 2. Auf die 1. Klasse zugreifen?

Danke für eure Hilfe
 
PHP:
class Login {
    public static function Sample($try)
    {
         $mysql = new Mysql();
         $mysql->this = 'that';
    }
}

Meinst du so? ansonsten mit class Login extends Mysql aber das ist nicht sehr sinnvoll denke ich
 
Jap fast ;)

Also wollte die Connection von der Seite weiter nutzen...
Also mehr so:
Code:
class mysql{
  function connect($host, $user, $pass, $db){
    ....
  }
  function query($query){
   ....
  }
}
class login{
  function test(){
    HIER DIE MYSQL-QUERY FUNKTION AUSFÜHREN
  }
}

$mysql = new mysql;
$login = new login;
$mysql->connect();
$login->test();

Die MYSQL-Klasse verwende ich auch auf der Seite, will aber nicht für jede klasse die was mit mysql zu tun hat eine eigene connection aufmachen!

Danke
 
PHP:
 class Login extends MySQL {

}

Somit vererbst du alle Methoden der MySQL-Klasse auch der Login-Klasse.
 
Wenn mich nicht alles täuscht, kannst du ohnehin darauf zugreifen...

Und wenn nciht, mach einfach so:
PHP:
class mysql{
  function connect($host, $user, $pass, $db){
    ....
  }
  function query($query){
   ....
  }
}
class login{
var $sql;    //Hier eine neue Variable fuer die SQL...
  function test(){
    $this->sql->query("SELECT * FROM hausbau WHERE bauer=5");
    HIER DIE MYSQL-QUERY FUNKTION AUSFÜHREN
  }
}

$mysql = new mysql;
$login = new login;
$mysql->connect();
$login->sql = $mysql;  //Die MySQL-Klasse jetzt uebergeben
$login->test();


Ich hoffe, es funktioniert so...

mfg
 
1. Sorry, hatte nicht gesehn, dass schon ein weiterer Eintrag gemacht worden war.

2. Die Lösung von Desert-hacker sollte funktionieren, aber ist kein gutes Softwaredesign. Ich würde schauen, dass du aus deiner MySQL eine Singleton-Klasse baust und diese dann halt wirklich in der Login-Klasse direkt aufrufst. Du wirst die MySQL-Klasse ja an anderer Stelle inizialisieren, oder?
 
1. Sorry, hatte nicht gesehn, dass schon ein weiterer Eintrag gemacht worden war.

2. Die Lösung von Desert-hacker sollte funktionieren, aber ist kein gutes Softwaredesign. Ich würde schauen, dass du aus deiner MySQL eine Singleton-Klasse baust und diese dann halt wirklich in der Login-Klasse direkt aufrufst. Du wirst die MySQL-Klasse ja an anderer Stelle inizialisieren, oder?

Was meinst du genau mit Singeton?

Also ich hab die Mysql-Klasse geschrieben, um direkt in jede query SQL-INJ. zu verhindern und die anzahl der Querys mitzuloggen
 
Dein Problem ist ganz einfach zu lösen.
Das Problem ist, dass du die MySql Verbindung ja nicht nur in der Login Klasse brauchst, du brauchst sie später auch in anderen Klassen.

also es gibt 2 Möglichkeiten:

1) du schreibst deine MySQL-Klasse als abstract class und lässt alle deine Datenbankklassen (Models) davon erben, wobei du dann in diesen Klassen nur Datenbankabfragen haben solltest und kein Workflow...

2) du schreibst dir ne Registry-Klasse, diese rufst du in deiner index.php auf, wo du die Datenbankverbindung herstellst und übergibst dann die Instanz der Datenbankklasse an die Registry. Der Vorteil ist halt, dass du nun in jeder-Klasse auf deine Datenbankverbindung zugreifen kannst....

Hoffe das konnte dir bissle helfen

MFG Nilson
 
Du hast rein logisch gesehen 3 möglichkeiten...
1. login von mysql ableiten
PHP:
class mysql{
...
}
class login extends mysql{
...
  function ...(){
   $this->query(...);
  }
}
2. Der Login Klasse ein Object von der Mysql Klasse zu übergeben...
PHP:
$db = new MYSQL();
$login = new login();
$login -> setdb($db);
class login{
  ....
  function setdb($db){
    $this->db = $db;
  } 
  function ...(){
    $this->db->query(...);
  }
}
3. Du hast 2 unabhängige klassen von einander wie bei beispiel 2, übergibst aber der login Klasse kein Objekt sondern legst in der Login Klasse ein Object an.
Falls du PHP4 nutzt würde ich beispiel 3 gebenüber 2 vorziehen...
Bei PHP5 wird soweit ich weiß nicht das object über geben sondern eine Referenz auf ein Object... (also 1mal angelegt)...
Falls ich jetzt nicht total daneben liege, wird bei PHP4 keine Referenz sondern eine Kopie des Object´s übergeben...
Bitte korrigiert mich falls ich daneben liege...
PHP:
class login{
 function ...(){
   $db = new MYSQL();
   $db -> query(...);
  }
}
 
Zurück